【问题标题】:Custom JQuery event firing in one place but not another自定义 JQuery 事件在一个地方触发,但不在另一个地方触发
【发布时间】:2011-05-18 20:13:06
【问题描述】:

这可能只是我自己对事件如何工作的无知,但有人可以解释一下:自定义事件不会在函数顶部触发,而是会在该函数内部的回调中触发。

以下工作(自定义事件触发):

function foo() {

    $.ajax( ... , function() {
            $.event.trigger("custom" , data );
    });

}

foo();

以下不起作用(自定义事件不会触发):

function foo() {
    $.event.trigger("custom" , data );

    $.ajax( ... , function() {
            ...
    });

}

foo();

事件绑定如下:

$(document).bind("custom custom1 custom2" , function( event, data ) {
    ...
});

我真的希望它在函数的顶部触发。非常感谢任何帮助!

注意:跨浏览器的问题相同,无论有无额外数据参数。

【问题讨论】:

  • 结尾被剪掉了:......跨浏览器的相同问题,有或没有额外的数据参数。
  • 是否可以在调用foo()之后绑定处理程序

标签: javascript jquery events custom-events


【解决方案1】:

它在异步回调中起作用的事实让我相信当 foo();被调用,实际的绑定还没有发生。执行此操作时需要注意事物的顺序。

jwwishart 的答案可能有效,因为他首先绑定......然后调用 foo.如果您按照事情发生的顺序发布整个代码,尽管它可能更容易调试。

【讨论】:

  • 是的。很简单。我认为绑定在 init 中,但它在其他地方,在异步回调中。当我在同一个函数中将它移入和移出回调时,它始终工作/中断的事实让我感到震惊。傻我!感谢您和 sje397 以及其他所有抽出时间的人。
【解决方案2】:

data 在您的第二个(非工作)方法中似乎未定义。

当我定义data 时,它按预期工作。

【讨论】:

  • 对不起,我应该更忠实于原始代码。数据总是在触发之前定义。但是当我一起删除数据参数时,我遇到了同样的问题。
  • 好点。我看到了这一点,但我的注意力集中在获得一段简单的工作代码上,因此我认为这不会是他的问题。
【解决方案3】:

以下工作...?

我什至只绑定了“自定义”,我删除了其他两个(让事情尽可能简单。)

$(document).bind("custom" , function( event, data ) {
    alert(data);
});


function foo() {
    $.event.trigger("custom" , "Works" );
}

foo();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    相关资源
    最近更新 更多