取消绑定事件无效

时间:2017-01-22 17:18:45

标签: javascript jquery

我想解开这个事件:

$(document).on('change', $('select[name=url]'), function() {}) ;

当我使用此方法在更改事件中取消绑定此事件时,它可以工作:

$(this).off();

但是当我使用它时,它不起作用:

$('select[name=url]').off();

其次,我想在变革事件之外解除事件。

2 个答案:

答案 0 :(得分:3)

要删除特定的委托事件处理程序,必须提供一个selector参数,其中选择器字符串必须与附加事件处理程序时传递给.on()的字符串完全匹配。

这样你就不必在onchnage回调中使用$(this).off()。此外,使用事件名称空间可确保您不解除任何不需要的事件的绑定

试试这个。

//here the namespace name is set to 'selection'
$(document).on('change.selection', 'select[name=url]', function() {
  alert("Change event triggered");
})

$("button").click(function() {
  $(document).off('change.selection', 'select[name=url]')
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="url">
  <option value="1">1</option>
  <option value="2">2</option>
  <option value="3">3</option>
</select>

<button>Unbind</button>

答案 1 :(得分:0)

事件on('change')被绑定到文档而不是元素('select[name=url]')

如果要为每个元素选择设置事件更改,最好的选择是设置公共类并将更改事件绑定到类。

如果您这样做,您可以将内部和外部的事件解除绑定到更改事件