看一看 http://jsfiddle.net/60j9hhz7/3/
UPDATED FIDDLE(使用此) http://jsfiddle.net/60j9hhz7/10/
HTML:
<div class="mycontainer">
<a href="#" class="test">test</a>
</div><br/>
<a href="#" class="unbind">doesn't work</a><br />
<a href="#" class="unbind2">works</a><br />
<a href="#" class="unbind3">works too</a>
JS:
$(document).on('click', '.test', function (e) {
alert('hello');
});
$(document).on('click', '.unbind', function (e) {
$(document).off('click', '.mycontainer a');
});
$(document).on('click', '.unbind2', function (e) {
$(document).off('click');
});
$(document).on('click', '.unbind3', function (e) {
$(document).off('click', '.test');
});
在小提琴中,您会看到第一个 off 无法正常工作(警报仍会弹出),而所有其他人都可以正常工作。
有人可以解释为什么会这样,是否有解决方案? 我需要能够定位某个容器中的所有链接,但是他们可能已经使用不同的选择器连接了他们的点击事件。
问题是 unbind2 太不明确了, unbind3 太具体了
由于
答案 0 :(得分:3)
以下问题需要.off()
使用与绑定.on()
事件相同的选择器
$(document).on('click', '.test', function (e) {//see .test
alert('hello');
});
$(document).on('click', '.unbind', function (e) {
$(document).off('click', 'a');//will not work
});
$(document).on('click', '.unbind2', function (e) {
$(document).off('click');
});
$(document).on('click', '.unbind3', function (e) {
$(document).off('click', '.test');//will work
});
EXP2:
$(document).on('click', '.mycontainer a', function (e) {
alert('hello');
});
$(document).on('click', '.unbind', function (e) {
$(document).off('click', '.mycontainer a');//will work
});
$(document).on('click', '.unbind2', function (e) {
$(document).off('click');
});
$(document).on('click', '.unbind3', function (e) {
$(document).off('click', '.test');//will not work
});
答案 1 :(得分:2)
off() doc中解释了这一点(等等,确实可能很模糊......):
.off(events [,selector] [,handler])
<强>选择强> 输入: String
一个选择器,它应该与最初传递给.on()的选择器匹配 附加事件处理程序