2011-02-09 5 views
0

あなたは私があなたの問題を理解するのを助けてくれたこのjsfiddleをチェックしています。 http://jsfiddle.net/kr1zmo/DqbeX/8/プラグインを保存した場合、それぞれの返されたクリックの中に

<a href="#" class="cref">item</a> 
<a href="#" class="cref">item 2</a> 
<a href="#" class="cref">item 3</a> 
<a href="#" class="cref">item 4</a> 

<p id="result"></p> 


<script language="javascript" type="text/javascript"> 
(function($) { 
    $.fn.liveBindTest = function() { 
     return this['live']('click', function() { 
      var savedvar; 

      if (!savedvar || savedvar == 0) { 
       // is false, do false things. 
       savedvar = 1; 
       jQuery('#result').append(savedvar); 
      } else { 
       // is true, do true things. 
       jQuery('#result').append(savedvar); 
       savedvar = 0; 
      } 

      return false; 
     }); 
    }; 
})(jQuery); 

jQuery(document).ready(function() { 
    $('a.cref').liveBindTest(); 
}); 
</script> 

クリックごとに変数を保存します。

+0

あなたは 'test'変数を設定していません。 – JCOC611

+1

'this.live(...)'と書いてみませんか? – SLaks

答えて

2

this exampleをご覧ください。

実行するコードのビットを切り替えたいですか?クロージャーで値を保持する場合は、ライブイベントハンドラー関数の外で値を宣言する必要があります。

値がセレクタにマッチした各要素ごとに開催される必要がある場合は、このexampleのように値を格納する$(elem).data()を使用することができます。

+0

savedvarはそれぞれ独立していなければなりません。その場合は – kr1zmo

+0

を '$(elem).data()'を使用して '$ .cache'に保持してください。 –

+0

更新:http://jsfiddle.net/kr1zmo/DqbeX/8/、それを今russしようとします。 – kr1zmo

2

イベントハンドラ内で変数を宣言し、ハンドラごとに別々のローカル変数を作成しました。

関数の外で変数を宣言する必要があります。
各要素に別々の変数が必要な場合は、変数を宣言してハンドラをeachコールに追加するか、jQueryの.data関数を使用します。

+0

そうですか? http://jsfiddle.net/kr1zmo/DqbeX/10/ – kr1zmo

+0

@ kr1zmo:これはいいですが、 'this.live(...)'と書くべきです。 – SLaks