【问题标题】:jquery event been called twice - dropkick.jsjquery 事件被调用了两次 - dropkick.js
【发布时间】:2014-08-27 07:50:53
【问题描述】:

所以我有这个问题,我有一个下拉菜单,然后我使用 dropkick.js 创建它。 (我只是在学习 dropkick.js,所以我现在认为我误解了一些东西。)

问题

当我像这样绑定 on change 事件时

$('.pizza_size').on('change', 'select[name=pizza_size]', function() {
    alert(this.value);
});

警报被调用两次。

Fiddle here

我最初的问题是选择下拉列表是动态更改的,所以$(".default").dropkick(); 不再适用,所以我在上面创建了这个动态选择器。 (如果有比这更好的动态绑定调用的方法,请告诉!:D)

有用的信息:(基于我的一些调试)

  • 最初的 html/脚本是这样的fiddle here,它创建了两个下拉列表,(尽管它们似乎不相关)我使用代码创建的一个 <select>...</select> 和一个 dropkick。 js 使用 class=dk_container dk_theme_default 类创建。所以我评论了这个 html 以避免这种情况(在第一个小提琴中),但它似乎仍然存在 2 个选择下拉菜单!

【问题讨论】:

  • 您的小提琴不起作用,因为您添加了具有开发路径的 js 文件,您需要使用实时路径删除开发路径。
  • @Yunus 现在应该可以工作了:D
  • 是的,我正在尝试解决这个问题。我还有另一个小提琴用于测试。

标签: javascript jquery jquery-dropkick


【解决方案1】:

我想我找到了问题:

在您的 dropkick.js 插件中,您选择触发了两次。 在您的插件中搜索这些行

$select.trigger('change');
$select.val(value).trigger('change');

在此处注释第一行

$select.trigger('change'); // comment this line in your dropkick.js file

并尝试。 “警报被叫了两次。”这将得到解决。

【讨论】:

  • 猴子补丁插件不是一个理想的解决方案,但在这种情况下,没有什么可做的。
【解决方案2】:

你可能应该使用 dropkick 的the documented API

$(function () {
    $('.default').dropkick({
        change: function () {
            alert("You selected " + $(this).val() + " for " + this.id + ".");
        }
    });
});

【讨论】:

  • 这就是我所拥有的,但如果我动态创建一个 .default 元素,这将不起作用
  • 这是一个论点。我猜Filing an issue against the dropkick repo 会是有序的。我会将change 事件的双重调用归类为错误。
  • 问题是我刚把项目(现在大约一个月)完成了一半,所以我不知道以前的人是否改变了dropkick.js。此外,我使用的是一个相当旧版本的库,所以我认为(如果它曾经存在的话)它仍然会存在:)。谢谢你的时间:D
  • 我只是想知道您是否可以使用旧版本,因为在当前版本中找不到违规行。我会敦促你升级。代码中的不兼容问题可能比 dropkick 源代码中的错误更容易修复。
  • 是的,升级似乎是明智之举。我只是希望功能上没有太多差异,所以这将是一个简单的过渡:)
猜你喜欢
  • 1970-01-01
  • 2011-07-24
  • 2011-10-07
  • 1970-01-01
  • 2022-01-19
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
相关资源
最近更新 更多