问题描述
|
我试图通过单击链接来增加JavaScript中的变量,该变量第一次起作用,但是如果我单击一次,它将每隔3次出现一次,然后出现4次,5次,依此类推。
控制台的屏幕截图:
蓝色(右侧)中的数字与预期的一样,没有任何问题,但是正如您在左侧看到的那样,每一行都是一键单击。第一个日志很好,但随后它记录了1次3次,然后记录了10次4次。
这是完成工作的代码。
$(\'.here\').live(\'click\',function(eve) {
eve.preventDefault();
var curpop = $(this).attr(\'rel\')
++curpop
$(\'.pop\').html(curpop);
console.log(curpop)
})
$(this).attr(\'rel\')
只是一个数字(在蓝色,右侧,图片中),一旦单击链接,即表示要增加该数字。
感谢您的帮助。
编辑:我已经在jsfiddle中设置了相同的内容,但是它似乎可以在其中工作,并且所有建议即使在应该的情况下也对我的项目无效。
<h4 class=\'left\'>Click
<a class=\"here\" href=\"#\" rel=\"1\">here</a></h4>
<h4 class=\'right\'>
<span class=\'pop\'>
1
</span>
</h4>
这是html,现在有多个,但是是通过ajax加载的,我猜想这与该类的多个实例有关,没有标识符来分隔它们?
更多编辑
因为我怀疑问题出在“类的多个实例,没有标识符来分隔它们”,所以我只是使每个像这样:
<span id=\"<?PHP echo $thereID; ?>_span\" class=\'pop\'>
1
</span>
然后
$(\'#\' + thereID + \'_span\').html(curpop);
谢谢你的帮助
解决方法
需要查看更多代码,但通常我会看到JS初学者将事件添加到事件内部。换句话说,每次单击链接时,都会添加另一个事件处理程序。
无论如何,这是在点击处理程序中增加计数器的示例:http://jsfiddle.net/GSuSk/
,
<a href=\"#\" id=\"link\">GO UP</a>
<p>0</p>
<script>
$(\'#link\').click(function(){
var v=$(\'p\').text();
$(\'p\').text(+(v)+1);
});
</script>
您为什么不尝试这种方法?在这里查看演示
, 不确定使用的代码数量有限,但是如果我没记错的话,我认为一个问题是,该变量是在live中创建的,实际上应该在外部进行初始化,以便只需要捕获一次,然后从那里开始递增不必每次都抓住新的价值。这是我重新安排的方式。
http://jsfiddle.net/robx/nDbb8/1/
, <script type=\"text/javascript\">
$(function(){
$(\'.here li a\').click(function(){
var current = parseInt($(this).attr(\'rel\'));
var inc = current + 1;
console.log(inc);
$(this).attr(\'rel\',inc);
});
});
</script>
<div >
<ul class=\'here\'>
<li><a href=\'#\' rel=\"1\">one</a></li>
<li><a href=\'#\' rel=\"10\">two</a></li>
<li><a href=\'#\' rel=\"37\">three</a></li>
<li><a href=\'#\' rel=\"1\">four</a></li>
</ul>
</div>
我认为这里不需要活动功能...关键是使用parseInt强制将rel属性的当前值转换为字符串形式... :-)