jQuery .live()用于多个选择器 - 如何解除其中一个选择器的绑定?

时间:2015-03-11 08:15:48

标签: jquery javascript-events live

我有这段代码:

http://codepen.io/anon/pen/dPgMWm

HTML:

<a href=# class=test1>test1</a>
<a href=# class=test2>test2</a>

和脚本:

$('.test1, .test2').live('click', dosth);

function dosth(e) {
  e.preventDefault();
  alert('test');
}

//my script
$('.test1').die('click');
$('.test1').unbind('click');

如你所见,我在多个选择器上有.live()(遗留代码:(),我必须从一个选择器中解除绑定...我该怎么做?

使用新的jquery和.on()/。off()它就像一个魅力,但如果我不能切换到新版本怎么办?我不能用绑定修改脚本......

编辑:

我有1.4.4版本。我无法修改处理程序。只有“我的剧本”部分。

2 个答案:

答案 0 :(得分:0)

我不相信你可以。你必须完全解开旧的,然后重新绑定你想保留的那些。

$('.test1, .test2').live('click', dosth);
    
function dosth(e) {
  e.preventDefault();
  alert('test');
}
    
$('.test1, .test2').die('click');
$('.test1').live('click', dosth);
<script src="http://code.jquery.com/jquery-1.7.min.js"></script>
<div class="test1">test1</div>
<div class="test2">test2</div>

(不用说,尽快更新到最新版本。)

答案 1 :(得分:0)

也许使用数据属性

&#13;
&#13;
    function dosth(e) {
      if ($(this).data("clickme") == true) {
        e.preventDefault();
        alert('test');
      }
    }

$(function() {
    $('.test1, .test2').live('click', dosth);
    $('.test1').data('clickme',true);    
    $('.test2').data('clickme',false); 
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<a href="#" class="test1">Click me</a><br/>
<a href="#" class="test2">Don't click me</a>
&#13;
&#13;
&#13;

更新 - 如果您需要修改dosth,可以替换它:

var mydosth=dosth; 
dosth=function(e) { if (....) mydosth(e); }