javascript - 如果更改事件未绑定(bind)然后反弹,下拉选项 "change"不起作用

标签 javascript jquery events jquery-mobile

我在将 off()on() 事件绑定(bind)到 select 下拉列表时遇到了这个奇怪的问题:

如果我取消绑定(bind)然后将 change 事件重新绑定(bind)到 select 下拉列表,我将无法更改下拉列表显示的值。换句话说,即使触发了更改事件,下拉列表中的所选值也不会正确更新。

如果我删除 off() 部分,只留下与 on() 绑定(bind)的事件,一切正常,但显然我无法阻止绑定(bind)同一事件多次发生。

在此处查看实例 http://jsfiddle.net/z7o11exs/

测试用例:

  1. 使用下拉列表(它有效!所选值正确显示在下拉列表中)
  2. 刷新页面。单击第一个按钮(关闭/打开),然后使用下拉菜单。由于所选值未更改,因此无法正常工作
  3. 刷新页面。单击第二个按钮(仅限),然后使用下拉菜单。它确实按预期工作。副作用:在第二个按钮上单击 n 次会将 n 次更改事件绑定(bind)到下拉元素

代码如下:

//--- This binds the event to the element
function bindEvent(){
   $("#myselect").on("change", function(){
        console.log("change"); 
    });
}

//--- remove any change event previously added, then rebind it
function rebindEvent(){
    $("#myselect").off("change").on("change", function(){
        console.log("change"); 
    });
}

提前致谢

最佳答案

尝试使用namespacing :

//--- This binds the event to the element
function bindEvent(){
   $("#myselect").on("change.something", function(){
        console.log("change"); 
    });
}

//--- remove any change event previously added, then rebind it
function rebindEvent(){
    $("#myselect").off("change.something").on("change", function(){
        console.log("change"); 
    });
}

正如@Karl所说,使用命名空间是:

为您的事件命名可以让您识别该事件。因此,在使用 .off 时,您可以针对特定事件进行关闭。

关于javascript - 如果更改事件未绑定(bind)然后反弹,下拉选项 "change"不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301358/

相关文章:

javascript - YouTube 事件嵌入到 Mobile Safari、iPhone(停止时回调)

javascript - Jquery:隐藏所有子项,然后显示特定元素

javascript - 复制jquery脚本并显示不同的结果

javascript - 使用 jquery/javascript 增加/减少点击时的 css 宽度

javascript - 数据表中的多个子行

javascript - ReactJS - SVG - 交互式时间线

javascript - 创建小时数组 : 00:00, 01 :00, 02:00

javascript - 如果在输入字段之外按下按键,则不会触发 keyup 事件

java - 是否可以撤消在 JTextarea 中键入的字符?

javascript - 有没有办法捕获网页上元素的创建和删除?