2011-01-17 12 views
1

jQueryプラグインを作成していて、変数に関していくつかの問題が発生しています。たとえば、私はプラグインのために以下のスケルトン構造を持っています。これはテキストボックスで動作します。私のinit関数では、変数を設定し、keypressイベントをテキストボックスにバインドします。そのkeypressイベントは、変数が必要な別の関数を呼び出す必要があります。これは可能ですか?jQueryを使用して関数間で値を保持する

(function($){ 
    var methods = { 
     init : function(options){ 
      return this.each(function(){ 
       var $this = $(this); 
       var someVar = 'somevar'; 
       $this.keypress(function(event){ 
        //I want to call my customFunction 
       }); 
      }); 
     }, 
     customFunction : function(){ 
      //I am wanting to access 'someVar' here 
     }; 
    $.fn.mynamespace = function(method){ 
     //handle which method to call here 
    }; 
})(jQuery); 

事前に感謝します。

答えて

1

外側のスコープで宣言myVar、およびJavaScriptの関数はclosuresかもしれないという事実は、あなたが仕事をしたいものをできるようになります:

(function($){ 
    var someVar; 
    var methods = { 
     init : function(options){ 
      return this.each(function(){ 
       var $this = $(this); 
       someVar = 'somevar'; 
       $this.keypress(function(event){ 
        //I want to call my customFunction 
       }); 
      }); 
     }, 
     customFunction : function(){ 
      //You may access 'someVar' here 
     }; 
    $.fn.mynamespace = function(method){ 
     //handle which method to call here 
    }; 
})(jQuery); 

編集:しかし、あなたは固有のデータを格納する場合各HTML要素には、data()のjQueryオブジェクトのメソッドを使用するか、要素自体にjQuery.data()を使用する必要があります。例:

(function($){ 
    var someVar; 
    var methods = { 
     init : function(options){ 
      return this.each(function(){ 
       var $this = $(this); 
       $this.data('myCode.blargle','somevar'); 
       $this.keypress(function(event){ 
        //I want to call my customFunction 
       }); 
      }); 
     }, 
     customFunction : function(){ 
      var someVar = $(this).data('myCode.blargle'); 
      // or $.data(this,'myCode.blargle'); 
     }; 
    $.fn.mynamespace = function(method){ 
     //handle which method to call here 
    }; 
})(jQuery); 
+0

私はそれを考えました。たとえば、var someVarは、テキストボックスに入力された文字の連結です。今私はこのプラグインを使用して2つのテキストボックスがある場合someVarは両方のテキストボックスの連結になります。つまり、これはプラグインを使用するテキストボックスが1つしかない場合にのみ機能します。私は関数を正しく呼び出していますか?$ this.mynamespace( 'customFunction')? – Peuge

+0

@Peuge私の編集を参照してください。 – Phrogz

+0

素晴らしいありがとうございました。 – Peuge

関連する問題