我有这段代码:
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 版本。而且我无法修改处理程序。只有"我的剧本"部分。
我不相信你能做到。您必须完全取消绑定旧的,然后重新绑定要保留的那些。
$('.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>
(不用说,尽快更新到最新版本。
也许使用 data 属性
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);
});
<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>
更新 - 如果您需要修改 dosth,您可以替换它:
var mydosth=dosth;
dosth=function(e) { if (....) mydosth(e); }