【问题标题】:in mootools: calling a function after all events on an element is finished在 mootools 中:在元素上的所有事件完成后调用函数
【发布时间】:2010-03-01 09:52:58
【问题描述】:

我有这个元素应用了各种变化事件 在 mootools 中发生所有更改事件后,我如何触发我自己的函数

一个示例场景是一个下拉列表

$('ddl').addEvent('change', function () { // 一些 ajax 调用在这里进行,我无法影响 // 因为页面是这样生成的 });

我现在想在更改事件完成后立即调用我的函数,但添加另一个更改事件不会这样做,因为我相信事件是异步执行的

【问题讨论】:

    标签: mootools


    【解决方案1】:

    通过您引用的 ajax 的 onComplete 传递一个回调函数。

    例如:

    $("ddl").addEvents({
        change: function() {
            new Request({
               method: "get",
               url: "somefile.php",
               onComplete: function() {
                   // run your next stuff from within here, referencing 
                   // this.response.text or whatevever and call up another function.
               }
            }).send("action=checkuser&id="+this.get("value").trim());
        }
    });
    

    还有 Chain 类 - http://mootools.net/docs/core/Class/Class.Extras#Chain,但由于您正在进行异步操作,因此您确实需要请求上的 onComplete。

    【讨论】:

    • @Dimitar,感谢您的提示,但正如我在问题中指出的(可能不够清楚),我无法影响如何将事件添加到 $('ddl') 但仍然需要在已添加更改事件后执行此操作
    • 如果是这种情况,那么您的处境并不好。基本上,正如您正确指出的那样,添加新的更改事件与现有事件是异步的。您的一个选择是,如果请求方法被回收,即实例存储到您可以从外部范围访问的变量中,您可以在请求实例上添加第二个更改事件 addEvent 的 onComplete 传递它还给你。否则,您需要执行一个循环,通过 ().periodical(nnn) 检查请求的结果,例如每 50 毫秒,直到您确定在运行下一个代码块之前完成。
    • 这是上面的一个例子:jsfiddle.net/9ZJst 如果没有,那么你可以通过定期检查层的示例内容更改(通过 ajax 更新)来修复它 - jsfiddle.net/q6rcP祝你好运
    • 这件事花了我很多时间,现在通过在触发我的实际调用之前做一些简单的检查,定期求助于你的解决方案,但这是人们期望在这样的框架中拥有的东西,谢谢!
    • 在这里说框架有问题而不是您的设计要求是不公平的,如果您将代码抽象在其他东西之上,您需要解决这些限制并且没有框架可以帮助打破“外部”范围/事件队列可帮助您做到这一点。如果你真的想要,你可以做 $("ddl").removeEvents() 然后再次添加它们,根据你自己的喜好重构,覆盖原来的 js
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    相关资源
    最近更新 更多