jQuery插件开发和上下文

时间:2011-03-09 14:25:10

标签: javascript jquery scope

我正在尝试开发一个jQuery插件。这是我到目前为止编写的代码片段:

var MYNAMESPACE = MYNAMESPACE || {};
MYNAMESPACE.MyPlugin = function (inputElement, options) {
    var element = $(inputElement),
    oldValue = element.val(),
    container = null,

    init = function () {
        container = $('<div class="container"></div>').hide().insertAfter(element);

        //the suggest method is called from within the anonymous function
        //called by getJSON...
    },

    suggest = function (resp) {
        for (var i = 0; i < len; i++) {
            var item = $('<div/>')
                .html('whatever')
                .mouseover(function (index) {
                    return function () {
                        activateItem(index);
                    };
                } (i));

            container.append(item);
        }
    },

    activateItem = function (index) {
        //container doesn't include those appended items.
        //why???
    };

    init();
};

(function ($) {
    $.fn.myplugin = function (options) {
        return new MYNAMESPACE.MyPlugin(this.get(0), options);
    };
} (jQuery));

在activateItem函数中,容器没有任何子项!!!那是为什么?

任何帮助都将受到高度赞赏,

1 个答案:

答案 0 :(得分:0)

container已经是一个已定义的jQuery对象,但您正在重新定义为'xxxx'。我猜你要插入这个值?尝试使用container.html('xxxx')

此外,您的mouseover函数似乎正在返回一个函数,其中索引将是未定义的(我还没有测试过),但请尝试这样做:

.mouseover(function () {
  container.html('xxxx');
  activateItem(i);
});

更新:好的,现在我有时间查看代码,len函数中没有定义suggest。我做了一个基本的demo来测试它,它似乎按预期工作。