Javascript 我应该如何编写我的插件来使用;“生活”;元素?

Javascript 我应该如何编写我的插件来使用;“生活”;元素?,javascript,jquery-plugins,jquery-selectors,jquery,Javascript,Jquery Plugins,Jquery Selectors,Jquery,我正在尝试使用jquery教程编写我自己的autosuggest插件,它应该能够处理动态创建的字段。但我没有成功。 例如: (function( $ ){ $.fn.dataSuggester = function(options) { //By using $.extend we merge predefined options with passed in plugin var options = $.extend({location:false, minlength:3

我正在尝试使用jquery教程编写我自己的autosuggest插件,它应该能够处理动态创建的字段。但我没有成功。 例如:

(function( $ ){

$.fn.dataSuggester = function(options) {

    //By using $.extend we merge predefined options with passed in plugin
    var options = $.extend({location:false, minlength:3, category:false}, options);
    var stop_keys = [16, 17, 18, 19, 20, 33, 34, 35, 36, 37, 38, 39, 40, 44, 45, 46, 91, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 144];

    return this.each(function() {

        var o = $(this);
        var suggestWrapper = $('<div class = "data-suggester suggest-box-wrapper">');

        o.focus(function() {
            console.log('aaaaa');
        });

        ...............................

    });

};

})( jQuery );

它不起作用。有人需要帮助吗?

。live
是一个事件绑定功能。它的工作原理是获取包装集
.dataSuggest
的描述,并在找到与该描述匹配的新元素时绑定指定的事件

jQuery插件通过在已经选择的元素集上执行函数来工作。这是两项完全不同的活动

如果你想让你的插件使用
.live
,那么它需要在某个时刻,有目标元素的描述被传递进来(而不是目标元素本身的包装集)

考虑一下这样的情况:

o.live('focus', function() {console.log('aaaa');});
// Plugin in use:
$.dataSuggest({ targetElements: '.customClass' });

// Plugin code:
$.fn.dataSuggester = function(options) {

    $(options.targetElements).live('focus', function(e) {
        // your code here...
    });

};

请注意,该插件不是在包装集
$('.whatever').dataSuggest()
上使用的,而是作为jQuery对象上的普通函数执行的。

到底是什么
,但我认为它没有我想要的那么漂亮。
是什么意思?还要大写您的i:)“但我认为它没有我想要的那么漂亮。”-这意味着我认为它可以用其他(更好的)方式解决,但我不知道如何解决:)谢谢你的评论:)谢谢你的详细回答。这有助于我理解我错在哪里。
o.live('focus', function() {console.log('aaaa');});
// Plugin in use:
$.dataSuggest({ targetElements: '.customClass' });

// Plugin code:
$.fn.dataSuggester = function(options) {

    $(options.targetElements).live('focus', function(e) {
        // your code here...
    });

};