Вопрос от новичка
Добрый день :)
Запутался в следующей задачке. Нужно сделать счетчик цифр для каждого параграфа p и в конце выводить общее значение. Счетчик делаю через ссылку. Однако общее значение вывести не получается, поскольку переменная сидит внутри функции. Видимо тут нужно как то изменить архитектуру ? :help: Подскажите как тут можно поступить ? <p class="eqv"></p> <p class="eqv"></p> </p class="eqv"></p> <label for="amount">Amount:</label> <input type="text" id="amount" style="border:0; color:#f6931f; font-weight:bold;" /> $(document).ready(function() { var count = 0; $('p.eqv').each(function() { var $thisParagraph = $(this); $thisParagraph.append('<a href="#" class="nup">+</a><span>0</span><a href="#" class="ndown">-</a>'); var count = 0; $thisParagraph.find('a').click(function(event) { if (event.target.className == "nup"){ count++; } else if (event.target.className == "ndown"){ count = count -1; } $thisParagraph.find("span").text(count); }); }); $('#amount').val(count+11); }); |
удалено.
|
Убрал внутренний var, все работает и без него. Однако так и не понятно как поступить тут. Можно упростить задачу до такого варианта.
$(function(){ $('div.eqv a').each(function(){ var c=0; $(this).click(function(){ c++; $(this).text('Some text' + c); }); }); $('div#sum').text(?); }); <body> <div class="eqv"><a href="#">1</a></div> <div class="eqv"><a href="#">2</a></div> <div class="eqv">222</div> <div>111</div> <div id="sum"></div> </body> Допустим функция возвращает какое то значение через return, но и дальше что и как ? $(function(){ $('div.eqv a').each(function(){ var c=0; $(this).click(function(){ c++; $(this).text('Some text' + c); return c; }); }); $('div#sum').text(?); }); куда девать этот возвращенный с, если функция у нас анонимная..... И так тоже не работает: $(function(){ var b = 0; $('div.eqv a').each(function(){ var c=0; $(this).click(function add(){ c++; $(this).text('Some text' + c); b =c; }); }); $('div#sum').text(b); }); |
удалено.
|
ваш код не работает, потому что в результат запишется с=0, а вызовы функции будут происходить по клику, который будет уже потом. Тут бы применить .live, он почему то у меня не работает. Однако я все же сделал работающий код, его нужно только отрефакторить.
Итак задача, нужно посчитать кол-во кликов по каждой ссылке и отобразить ниже сумму. $(function(){ var c=0; function aa(){ c++; $(this).text("Click"+c); cc(); }; var f=0; function bb(){ f++; $(this).text("Click"+f); cc(); }; function cc(){ $('div#sum').text('Сумма:'+(c+f)); } $('div.eqv1 a').click(aa); $('div.eqv2 a').click(bb); }); <div class="eqv1"><a href="#">1</a></div> <div class="eqv2"><a href="#">1</a></div> <div id="sum"></div> Задача упростилась, поскольку вместо each я вызываю click для конкретного дива и, соответсвенно, вызываю разные функции для каждого дива. Как сделать, что бы это работало в each, пока не придумал. :) |
удалено.
|
"код не проверял, если работать не будет просто суммируйте коллекцию значений после выполнения всех действий - делается доп выборка перед $('div#sum').text(с)."
Такого рода идеи ? тогда извините я вас не понял :) |
удалено.
|
удалено.
|
удалено.
|
Цитата:
http://ilyabirman.ru/meanwhile/2010/11/08/1/ |
удалено.
|
удалено.
|
Часовой пояс GMT +3, время: 12:11. |