Rumah  >  Artikel  >  hujung hadapan web  >  详解JavaScript的for循环中嵌套一个点击事件的问题解决方法

详解JavaScript的for循环中嵌套一个点击事件的问题解决方法

黄舟
黄舟asal
2017-03-23 14:50:522125semak imbas

本文主要介绍了JavaScriptfor循环中嵌套一个点击事件点击一次弹出多个相同的值的解决方法,具有很好的参考价值。下面跟着小编一起来看下吧

先看下面一段代码:

for(var i=0; i<10; i++) {
 $(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })
}

对于这段代码,当点击Id为“ul”的元素时,会出现弹出10个10。为什么会弹出10个10呢?

首先,这段代码中的点击事件不是绑定事件,是jQuery的绑定事件,那么绑定事件和普通事件是有区别的。普通事件中,如果对某一个元素添加多个点击事件,那么,最后一个将会把前面的所有点击事件全部覆盖,只能执行最后一个点击事件;而在绑定事件中,则不一样,在同一个元素上,即使绑定再多的点击事件,都会全部执行。也就是说,普通事件中的onclick只支持单个事件,会被其他onclick事件覆盖,而事件绑定中的点击事件可以添加多个事件而不用担心被覆盖。那么,可想而知,当点击Id为“ul”的元素时,一定会弹出10个弹窗。

如果还是不太明白,那么对代码进行变形之后,就很容易理解了。

其实,上面的那段代码可以变形为以下形式:

// i=0时
$(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })
// i=1时
$(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })
 
......
 
// i=10时
$(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })

扩展:下面这段代码是对上面的那段原始代码的比较,进一步说明普通事件和事件绑定的区别

for(var i=0; i<10; i++) {
 document.getElementById(&#39;ul&#39;).onclick = function() {
  alert(i)
 }
}

运行结果:弹出一个10

很显然,当触发点击事件时,会弹出10个弹窗。那么,可能又会有疑问?为什么会是10个10呢?不应该是0,1,2,3...10吗?为了解决这个疑惑,可对原始代码进行再次变形:

var i=0
 
$(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })
i=1
$(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })
 
......
 
i = 9
$(&#39;#ul&#39;).bind(&#39;click&#39;, function() {
  alert(i)
 })

原始代码,变形为这样之后,很显然,最终i的值是9,但是根据for循环的原理,在循环到i为9之后,会执行i++,之后再去判断i<10,此时已不满足条件,所以终止循环,最终i值为10。那么自然也就明白,为什么最终结果是10个结果为10的弹窗。

总结:这段代码看似简单,却涵盖了事件绑定、普通事件、for循环等多个知识点。

Atas ialah kandungan terperinci 详解JavaScript的for循环中嵌套一个点击事件的问题解决方法. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn