【问题标题】:Can't attach event handler无法附加事件处理程序
【发布时间】:2014-05-16 14:10:59
【问题描述】:

我是using this plugin,负责管理分层数据。现在我要做的就是监听onclick 事件。是的,这听起来愚蠢,但它根本不起作用!

问题是元素确实存在,但不可能为它们附加监听器!

        $('#nestable2').find('.dd-handle, .dd-item').on('click', function(e){
            alert("Test");
        });

有人遇到过这个问题吗?

更新

  • 是的,它的内部 DOM 就绪
  • $('#nestable2').find('.dd-handle, .dd-item').length 不返回 0,而是一个更大的值
  • 我已经尝试过事件委托和“常规”事件侦听器

【问题讨论】:

  • $('#nestable2').find('.dd-handle, .dd-item').length的值是多少?
  • 选择器是否匹配?
  • @Halcyon 正如我所说他们确实存在,他们的.length 大于0 !!
  • @RoryMcCrossan 由于.length 属性大于0,看起来确实如此
  • R u 将代码放入 $(document).ready() 函数中

标签: javascript jquery jquery-plugins nested-lists


【解决方案1】:

如果您完全确定 $('#nestable2').find('.dd-handle, .dd-item') 确实返回了元素,那么实际发生的情况可能是您正在其他地方取消注册该元素的点击处理程序。看起来像这样:

$('.dd-handle, .dd-item').off("click")

它甚至可以更加晦涩,例如$("button").off("click")

如果您的代码库很大,这可能很难找到。

您可以做的一个巧妙的技巧是利用 jQuery 的特殊事件。 您可以添加一个在每次添加或删除事件处理程序时运行的方法,并在其中放置一个调试器语句,最后检查它在代码库中发生的位置(例如使用 chrome 中的开发工具并检查调用堆栈)

你可以这样做(在页面中尽快添加这个,在你加载 jquery 之后):

$.event.special.click = {
  add: function(handlerObj){ debugger; },
  remove: function(handlerObj){ debugger; }
};

handlerObj 包含
-类型
事件的类型,在本例中为 click
-命名空间 一个字符串,其中包含“on”上提供的所有命名空间,如果有的话 -选择器
-指导
-数据 -处理程序

这里有一个很好的资源来解释special events

不要排除已添加的事件处理程序,它们可能已调用 stopPropagation 并负责您期望运行的处理程序,而不是运行。

【讨论】:

    【解决方案2】:

    是的,您的事件正在注册到元素中。但问题是您正在使用的第 3 方代码。沿着这条线的某个地方,它们正在覆盖或取消点击操作。

    如果您将您的 click 更改为 mousedown,您将看到您的警报,以证明该活动正在注册。

    在测试页面上运行这个

        $('#nestable2').find('.dd-handle, .dd-item').on('click', function(e){
            alert("CLICK");
        }).on('mousedown', function(e){
            alert("mousedown");
        });
    

    我看到的是鼠标按下,而不是点击。

    【讨论】:

    • 您确定 mousedown 上的 preventDefault 会阻止点击事件的发生吗?
    • @Rui 它不应该 AFAIK 并且可以看到:jsfiddle.net/5MRLg 如我所见,该插件正在使用某种帮助程序/克隆在 mousedown 时从 DOM 中删除元素。但是你,我猜使用 mousedown 而不是 click 会起作用
    • 我正在使用 chrome,我看到了警报,所以即使在 mousedown 上调用了阻止默认值时,我也会点击
    • @Rui 同样在 chrome 上
    • @A.Wolff 我也将它作为控制台运行,但它也没有运行。所以警报使差异为零。
    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多