将.on()用于jquery插件的最佳方法?

时间:2013-04-14 17:01:53

标签: jquery ajax dom bind handler

我想为我的网站创建一个jquery插件。

我将创建事件,我想知道处理处理程序的最佳方法是什么。

我担心的是,当DOM html由于ajax查询而发生变化时,我们必须保持事件绑定。经过一些研究后,我发现最好的方法是使用jonery中提供的.on()函数。

以下是我的尝试:

jQuery.fn.wtpicker = function ( params ) {
    var currentSelector = $(this);

    $(document).on('click', currentSelector, function(event) {
        alert('test');
    });

    return this;
}

但它不起作用......

live()已弃用,如果使用ajax查询动态更改HTML,则经典绑定d.click()不起作用...好吧,我迷路了。

我应该指定选择器的dom,比如第二个参数中的“#whatever div.myclass”。但由于它是一个插件我无法知道。

为了使它成功,我不得不写:

jQuery.fn.wtpicker = function ( params ) {
    var currentSelector = $(this);

    $(document).on('click', '#whatever div.myclass' , function(event) {
        alert('test');
    });

    return this;
}

但是,如果我不是另一个选择器,它就没有效率。

是否可以检索插件本身在插件中使用了DOM选择器?我不想通过dom传递一个参数。这不是一个好方法。

非常感谢

1 个答案:

答案 0 :(得分:1)

如果您想要选择器而不是所选元素,请尝试.selector

jQuery.fn.wtpicker = function ( params ) {
    var currentSelector = this.selector;

    $(document).on('click', currentSelector, function(event) {
        alert('test');
    });

    return this;
}

从下面的评论.selector cannot be relied upon to give a valid selector,它在jQuery 1.7中也被弃用,并在jQuery 2.0中被删除