2011-03-09 5 views
0

私はjQueryプラグインを開発しようとしています。これまでに書いたコードスニペットは次のとおりです。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関数内では、コンテナに子がありません!!!何故ですか?すべてのヘルプは高く評価されるだろう

答えて

0

containerは、すでに定義されたjQueryオブジェクトですが、「XXXX」に再定義されています。私はあなたが値を挿入したいと思いますか? container.html('xxxx')をお試しください。

また、(私はそれをテストしていない)あなたのmouseover関数はインデックスが不定となります機能を返して表示されますが、代わりにこれを試してみてください。

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

更新:[OK]を、今をコードを見る時間があると、lensuggest関数の中で定義されていないようです。私はそれをすべてテストするための初歩的なdemoを作ったが、それは期待どおりに動作するようだ。

+0

正に、私はこの方法でコンテナの値を変更するつもりはありません。コードに注意を払うと、container.append(item)を使用して新しく作成されたアイテムがコンテナに追加されます。それは正常に動作しますが、activateItem関数内から最新の変更されたconatinerにアクセスする必要があります。ただし、コンテナには子がありません(ただし、これらの要素は画面に表示されますが、activeItem関数のcontainer.children()。lengthは0です)何が間違っていますか? – Jack

+0

私は実際には、値をactivateItem関数に渡すためにクロージャーが必要です。 – Jack

+0

次に、 'xxxx'にコンテナを設定する目的は何ですか? – Mottie

関連する問題