现在我有相同的li如下
<ul>
<li>
<div class="a"></div>
</li>
<li>
<div class="a"></div>
</li>
<li>
<div class="a"></div>
</li>
</ul>
用jquery给他们绑定事件,并测试如下
var x = 0;
function doTest(){
$(".a").bind("click",function(){
x = x + 1;
alert("times="+x);
})
}
这样下来,我点击第一个li的a时候,它打印一次,x为1,可是当我点击第二个li的a时候,它要连续打印两次,x也分别为2,3 我就想不清楚了,这是不是说这个绑定的click方法在我点击第二个a的时候执行了两次??第三个更多的次数会一次递增。这是什么原理啊?
我本来想实现计算每个a的点击次数,来实现相应li的CSS效果,可是现在在偶数a的时候就自动执行偶数次,偶数个li就没办法有效果了比如说,第一个a,我想的是点击一次,它显示,点击第二次影藏,可以,但是到第二个a的时候,点击一下,它自动把x的值加了两次,再点一次,它又自动加了两次。就没法搞了啊。真真就不知道怎么办了。
大神们。怎么办呢?
<ul>
<li>
<div class="a"></div>
</li>
<li>
<div class="a"></div>
</li>
<li>
<div class="a"></div>
</li>
</ul>
用jquery给他们绑定事件,并测试如下
var x = 0;
function doTest(){
$(".a").bind("click",function(){
x = x + 1;
alert("times="+x);
})
}
这样下来,我点击第一个li的a时候,它打印一次,x为1,可是当我点击第二个li的a时候,它要连续打印两次,x也分别为2,3 我就想不清楚了,这是不是说这个绑定的click方法在我点击第二个a的时候执行了两次??第三个更多的次数会一次递增。这是什么原理啊?
我本来想实现计算每个a的点击次数,来实现相应li的CSS效果,可是现在在偶数a的时候就自动执行偶数次,偶数个li就没办法有效果了比如说,第一个a,我想的是点击一次,它显示,点击第二次影藏,可以,但是到第二个a的时候,点击一下,它自动把x的值加了两次,再点一次,它又自动加了两次。就没法搞了啊。真真就不知道怎么办了。
大神们。怎么办呢?
2:x为全局变量,每点击一次x将递增1
3:如果你想控制它在显示/隐藏之间切换。使用jQuery没你搞得那么复杂
$(this).toggle()即可
我一直怀疑是js的自动计数问题。
这样,本来我的页面加载完成后,有3个li,然后点击第一个li的a,它打印一次x的值,当我动态添加一个li进去,加在第一个li前面,新加的li里面的a点击时,打印一次,原来那个li,也就是现在这个li的a,点击它就自动打印两次,它自动打印,x的值也会相应增加。也就是说,不管我点击的次数是几次,它打印次数和x的值,却是根据li在当前页面所有li的排序的数来计算的这是什么原因呢?
我在动态向页面添加li的时候,用了这样一句:$(".list li").eq(0).before($(oLi)); 用来插入li。具体是什么问题,我就真真不知道了。
dotest()这个方法 设置断点
调试的时候 查看 调用栈看看到底从哪里开始调用了 dotest法 和click给你10分钟去试下
你每动态添加一个li就执行一次doTest()???我前面第一条就说了,你要确定只绑定了一次,你这哪里是绑定一次呀,你这每加多少li进去就重复的绑定了多少次事件,你说的什么"打印的次数"就是你执行了doTest()的次数将doTest中的$(".a").bind改为$(".a").live。只在初始化时调用一次即可,后面动态添加进去的li不要再去调用doTest
我不是啥大神呀。而且我也么有生气呀碉堡了。jQuery中使用bind或者直接事件[click,blur,change.....等等]进行的事件绑定,都是可追加形式的。绑定几次执行几次,后面的并不会覆盖前面的使用live和delegate绑定的事件,可以给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效