javascript - 事件多次触发

标签 javascript jquery

$("input[type='color']").on("change blur", function() {
    alert("changed");
});

这也适用于其他元素,但这是一个很好的例子。在某些浏览器上使用颜色输入类型时,它会在“更改”时触发,但不会在“模糊”时触发,在某些浏览器中会在“模糊”时触发,但不会在“更改”时触发,而在某些浏览器中,它会在两者上触发。

有没有好的方法保证只触发一次?

我这里主要说的是各种手机浏览器。

最佳答案

我编写了 .one() 的专用版本,它将在处理完第一个事件后重新绑定(bind)事件处理程序。它在包装器中执行此操作,因此不必更改事件处理程序代码本身。

$.fn.one_rebind = function(events, listener) {
  return this.one(events, function fn() {
    var $self = $(this).unbind(events);

    listener.apply(this, arguments);

    setTimeout(function() {
      $self.one(events, fn);
    }, 0);
  });
};

$('input[type=color]').one_rebind('change blur', function(evt) {
  document.getElementById('debug').innerText += ' ' + evt.type;
});

虽然经过测试,但您的里程可能会有所不同 :)

Demo

关于javascript - 事件多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846033/

相关文章:

javascript - d3.js 在排序数据后更新条形图标签

php - Jquery 文本输入更改功能不起作用

jQuery:如何将所有样式表类+id 放入数组中

jquery - 将子 div11 显示在与另一个子标签 p 相同的父 div 中

javascript - 如何从 Contentful 中获取单个条目并按字段值查询?

javascript - 使用 PhantomJS 将多个页面渲染为 pdf 文件

javascript - 我应该在哪里定义我的 Javascript 闭包?

jquery - 仅更改背景色中的 Alpha channel

jquery - 尽管显示 :inline,但动态添加到列表的元素符号会结束

javascript - 在 javascript 中使用元素集合数组中的元素