非dom元素上的jQuery事件。 (像ajaxComplete行为)

时间:2011-12-21 10:12:42

标签: jquery

我想创建一个类似于每个Ajax请求之后触发的事件ajaxComplete的行为,无论如何,无论是否在每个Dom元素上都已完成。

我使用了我用于Jquery核心代码的代码

// Attach a bunch of functions for handling common AJAX events
jQuery.each("openEtFoldingFieldset closeEtFoldingFieldset".split(" "), function(i, o) {
    jQuery.fn[o] = function(f) {
        return jQuery.fn.on(o, f);
    };

在我的插件中,我触发openEtFoldingFieldset事件

var etFoldingFieldsetOpenEvent = jQuery.Event("openEtFoldingssFieldset");
jQuery.fn.trigger(etFoldingFieldsetOpenEvent);

在我的页面脚本中,我尝试为触发器添加句柄

$('.log').openEtFoldingFieldset(function() {
    alert("folding open");
    return true;
});

就像我为ajaxComplete做的那样

$('.log').ajaxComplete(function() {
    $(this).text('Triggered ajaxComplete handler.');
})

我没有得到任何错误,函数openEtFoldingFieldset被jQuery正确识别,但函数永远不会被调用。

希望有些人可以帮助我。

提前致谢

1 个答案:

答案 0 :(得分:1)

对于您自己创建的任何事件处理程序,您需要使用bind()(如果使用jQ 1.7,则需要on())。这是因为click()keyup()等处理程序是jQuery源代码中的快捷方式bind("eventName", fn)(或jQuery 1.7 + on("eventName", fn))。您不能简单地创建一个事件,并将其用作jQuery对象的函数。

考虑到这一点,试试这个:

$('.log').bind("openEtFoldingFieldset", function() {
    alert("folding open");
    return true;
});