Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вопрос от новичка (https://javascript.ru/forum/jquery/13297-vopros-ot-novichka.html)

romanco 24.11.2010 21:26

Вопрос от новичка
 
Добрый день :)
Запутался в следующей задачке.
Нужно сделать счетчик цифр для каждого параграфа 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);
    	});

Gozar 24.11.2010 21:28

удалено.

romanco 24.11.2010 22:26

Убрал внутренний 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);
	});

Gozar 26.11.2010 00:20

удалено.

romanco 26.11.2010 10:33

ваш код не работает, потому что в результат запишется с=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, пока не придумал. :)

Gozar 26.11.2010 10:50

удалено.

romanco 26.11.2010 14:09

"код не проверял, если работать не будет просто суммируйте коллекцию значений после выполнения всех действий - делается доп выборка перед $('div#sum').text(с)."

Такого рода идеи ? тогда извините я вас не понял :)

Gozar 26.11.2010 20:17

удалено.

Gozar 26.11.2010 20:19

удалено.

Gozar 26.11.2010 21:10

удалено.


Часовой пояс GMT +3, время: 13:44.