取消绑定侦听器并稍后重新绑定

时间:2014-11-10 08:13:48

标签: javascript jquery

在我的应用程序中,我使用的是插件(noUiSlider),我想通过点击使工具提示可编辑。

我的问题是,插件中的监听器会阻止工具提示的点击。 我想取消绑定所有听众,存储它们并在一段时间后重新绑定。

像(这不会起作用):

var listeners = $(element).unbind("click");
[...]
$(element).bind(listeners) 

这可能吗?

1 个答案:

答案 0 :(得分:0)

尝试

var element = $(selector), listeners = [];
// remove listeners
if ($._data(element[0], "events") !== undefined) {
  $.each($._data(element[0], "events"), function(key, value) {
    listeners.push([key, value[0].handler]);
    element.off(key);
  }); 
};
// add listeners
$.map(listeners, function(value) {
  element.on(value[0], value[1])
});

var div = $("div"), listeners = [];
div.on("click dblclick mouseover", function(e) {
  console.log(e)
});

if ($._data(div[0], "events") !== undefined) {
  $.each($._data(div[0], "events"), function(key, value) {
    listeners.push([key, value[0].handler]);
    div.off(key);
  }); 
};

$("button").on("click", function(e) {
  $.map(listeners, function(value) {
    div.on(value[0], value[1])
  });
  div.text(function(_, text) {
    return text.replace(/off/, "on")
  })
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div>click dblclick mouseover (off)</div><button>click</button>