使用类选择器时,jquery click事件多次触发

leo*_*ora 27 html jquery click css-selectors

这是我的HTML

<li><div class="myLink" id=1>A<div>
<li><div class="myLink" id=2>b<div>
<li><div class="myLink" id=3>c<div>
<li><div class="myLink" id=4>d<div>
<li><div class="myLink" id=5>d<div>
<li><div class="myLink" id=6>e<div>
<li><div class="myLink" id=7>d<div>
<li><div class="myLink" id=8>g<div>
Run Code Online (Sandbox Code Playgroud)

我用这段代码创建了一个jquery事件绑定:

    jQuery(".myLink").click(function(event) {

         var myId = this.id;

         location.href = '/x/y?myId=' + myID;
   });
Run Code Online (Sandbox Code Playgroud)

当我点击其中一个链接(li项目).我认为这会触发一次点击事件,当我调用this.id时,我会得到我点击的项目的id.

但它看起来像:

   jQuery(".myLink").click(function(event) {
Run Code Online (Sandbox Code Playgroud)

即使我只是点击一个链接就一遍又一遍地开火.我在他们的firebug中放了一个调试器声明,看到这个被一遍又一遍地调用.

有什么想法吗?

use*_*568 69

我遇到了类似的问题,我的解决方案是在声明click事件之前取消绑定click事件.没有多大意义,但我不知道多个事件是如何附加到单个HTML元素的.(我的HTML看起来有效;))

$('.remove_lkc').unbind('click').click(function(){..........

  • 如果修复它,你可能会在整个过程中的某处重新绑定click事件.这里讨论重新绑定的基础知识:http://www.learningjquery.com/2008/05/working-with-events-part-2 (8认同)

Eri*_*rik 18

如果您关闭<li>代码,则可以解决问题.我刚刚对它进行了测试,并对其进行了修正.应该

<li> ... </li>
<li> ... </li>
Run Code Online (Sandbox Code Playgroud)

<li>
<li>
Run Code Online (Sandbox Code Playgroud)


Pra*_*oya 14

在我的例子中,我有多个标签呈现相同的部分,每个部分都有$(document).ready()调用,它将click事件绑定三次.

  • D'哦!我把我的js卡在了部分模板的顶部,只是为了在我工作的时候测试它并且它已经发射了四次.让我挠头,因为其他评论似乎不符合我的情况,所以感谢你指出这一点!我完全忘了我在其他标签的其他地方使用模板...... (4认同)

Joh*_*n B 9

添加这两行解决了它:

event.stopPropagation();
event.preventDefault();
Run Code Online (Sandbox Code Playgroud)

来源:http: //code.google.com/intl/en/mobile/articles/fast_buttons.html


rfu*_*duk 6

尝试将id属性的值放在引号中.你刚才放的时候会发生奇怪的事情id=1.

另外,你怎么知道它多次开火?将此行放在函数的顶部并观察firebug日志以查看发生的情况:

console.log( "clicked on", jQuery(this), "which has id", jQuery(this).attr('id') );
Run Code Online (Sandbox Code Playgroud)

编辑:

嘿,正如其他人所指出的那样......确保你的标记也是有效的:P

  • 我还建议你正确关闭你的div和li元素. (7认同)

chr*_*awn 6

我的问题是,当我创建<div>s 时,我在循环中进行了事件绑定,因此为事件中的每个项目反复添加事件.这只是需要仔细检查的东西.

  • 正是这个问题.我正在使用类选择器$(".class").在循环内单击(function())所以我在每次循环迭代时添加了多个单击处理程序.确保您的.click处理程序在循环外部设置. (2认同)