【问题标题】:Live() with custom events in jQueryLive() 与 jQuery 中的自定义事件
【发布时间】:2012-07-23 17:44:24
【问题描述】:

我正在为鼠标事件和触摸事件使用事件规范器。这样,我就不需要维护两段代码:一段响应触摸事件,另一段响应触摸事件。

它工作正常,但我不能让它与 live() 函数一起工作。

在规范化过程结束时,以这种方式触发规范化事件:

var touchMouseEvent = normalizeEvent(type, event, event.pageX, event.pageY);
$(event.target).trigger(touchMouseEvent);

我尝试使用这些调用让现场活动发挥作用:

$('.MyClass').live('TouchMouseEvent', function(){...});
$('.MyClass').live('normalizeEvent', function(){...});
$('.MyClass').live('touchMouseEvent', function(){...});

但没有任何效果。

通常,自定义事件的触发器被称为像 $('.Class').trigger('customName') 这样的字符串,所以我想知道这是否就是我为此苦苦挣扎的原因。

这是我用于规范化的代码。 https://gist.github.com/2375726

谢谢!

【问题讨论】:

  • 请使用.on(),因为.live()已被弃用。
  • 会做,但它正在做一些测试,我正在使用 on() 进行这些测试,但它不起作用。
  • 自定义事件不适用于 jQuery 1.3.x 中的 .live。你用的是什么版本的jQuery?
  • 我使用的是 1.7.2。我认为 live() 是在 1.4 中引入的,所以我应该没问题。
  • MyElement 是偶然动态创建的吗?

标签: jquery events live


【解决方案1】:

不确定 live() 是否适用于基于委托的自定义方法/事件。委托本身依赖于被触发的实际 DOM 事件,但它们被委托到 document.body 级别。尝试改用 bind()。

【讨论】:

  • 我认为你是对的。我使用了 .delegate() 并且工作正常。请参阅下面的答案。
【解决方案2】:

我找到了解决方案。我没有使用 live() 函数,而是使用了委托函数。

例如:

$('#wayPointList').delegate('.deleteWayPoint', TouchMouseEvent.UP, function(){
//do something here
});

像魅力一样工作! 感谢大家的回答/建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多