【问题标题】:Click event fired before clicked on Firefox点击 Firefox 之前触发的点击事件
【发布时间】:2015-05-12 15:03:11
【问题描述】:

我在 IE 和 Chrome 上正确触发了一个 click 事件,但在 Firefox 上却没有。

我的代码:

sender.bind("open", function () {
    var $openButton = sender.wrapper.find('.k-i-arrow-s');
    $openButton.addClass('active');

    $(document).delegate($openButton, "click", function () {
        sender.close();
        sender.input.blur();
    });
});

问题是,Firefox 上的 delegate 在点击事件注册的第一时间就被触发了!我也尝试过 on()bind() 并且发生了同样的情况。

解释代码:

这是一个 Kendo MultiSelect 控件。当它打开时,我必须向 $openButton 对象注册一个点击事件,仅此而已。

有什么想法吗?

这里是道场:http://dojo.telerik.com/eSOBo

点击箭头进行测试!

最好的问候

丹尼尔

【问题讨论】:

  • 那么您是否尝试过使用 setTimeout,或者可能使用某种变量标志.. 例如,如果 isOkToDelegate 然后做委托..
  • 没有@DionDirza,我希望能正确解决这个问题。
  • 你能做个小提琴或道场吗?
  • 我用道场更新了帖子! :)

标签: jquery firefox kendo-ui kendo-multiselect


【解决方案1】:

只需查看您的代码及其充满不必要的代码

sender.input.after($openButton);

第 52、59 行你总是插入相同的内容,你已经用相同的代码将箭头放在第 46 行,你不再需要这个了。

绑定closeopen 用于多选以在箭头中添加和删除活动类,这会破坏您的预期行为。我建议你阅读"What is event bubbling and capturing?"

当您正常单击箭头或多选文本框时(所有浏览器应该具有相同的行为)事件捕获将工作相同,从多选打开然后箭头单击事件开始。 然而,这个 jquery 代码after 重新插入了元素内容,给你在 Firefox 和其他浏览器中的不同体验。尝试删除该代码,看看所有浏览器会发生什么。

查看此dojo 以了解所有浏览器都支持的更简单的实现。

【讨论】:

  • 这就是解决方案!谢谢@DionDirza
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 2015-12-19
  • 2023-03-27
  • 2015-04-28
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多