2012-02-01 45 views
0

我有多个元件用相同的类“可点击”,我是结合所有这些类以:jQuery.bind解除绑定,倍数实例

$('.clickable').bind('click', function() 
    { 
     $(this.id).html('clicked'); 

    } 

我假定绑定结合各元件与该类可单独点击。 那么这个绑定功能中,我想取消绑定当前点击的元素:

$(this.id).unbind('click'); 

所以,如果你在这个元素中再次点击,它不会再次触发点击功能。 然后,在元素中做的东西后(替换文字withing这些元素用的是把当前的文本在里面,当你点击外面就西港岛线改变它的HTML)我想再次重新绑定点击,但我cant't似乎解除绑定点击this.id ...

一些捣鼓澄清: http://jsfiddle.net/TrySpace/QZMP6/7/

回答

4

可能是因为你的选择是错误的(因为你的选择将转化为类似$("my_id")当你真的想要$("#my_id"))。在这种情况下,你可以这样做:

$(this).unbind('click'); 

哪个最终比再次查询元素的DOM好。

备注bindunbind从jQuery 1.7开始已弃用。写这个更新的方法是用onoff

$(".clickable").on("click", function() { 
    /* ... */ 
    $(this).off("click"); 
}); 

编辑(每下面的注释):

如果你想防止父事件处理程序被通知为好,你可以绑定新的处理程序,阻止事件的传播:

$(this).off("click").on("click", function (e) { 
    e.stopPropagation(); 
}); 
+1

@Gasman,如果你想使用id,你必须包括在前面''#,比如'$( '#' + this.id)'。当然,我们没有理由你应该这样做时,你可以做'$(本)',但我想我会指出你有选择错的具体地方。 – 2012-02-01 20:49:35

+0

@BenLee:谢谢 - 从来就更新了我的答案,包括您的评论 – 2012-02-01 20:53:42

+1

@Andrew:该文档没有列出'绑定/ unbind'作为正式弃用,但它的确说明'上/ off'为*“首选“*。 – 2012-02-01 20:54:56

1

你可能要考虑jQuery的选择基于事件委托,只是去掉'clickable'ç姑娘点击时...

$('body').on('click', '.clickable', function() { 
    $(this).html('clicked') 
      .removeClass('clickable'); 
}); 

或者预jQuery的1.7,但1.4后左右...

$('body').delegate('.clickable', 'click', function() { 
    $(this).html('clicked') 
      .removeClass('clickable'); 
}); 

在这两种情况下,我把委托处理的'body',但它最好将它放在更多的本地元素上,只要它包含所有的元素即可。