2012-01-19 8 views
3

の優先メソッド呼び出しを使用しようとしていますが、のコードはで動作しませんが、ライブメソッドで動作します。jquery関数はライブで動作し、

私は単純なボタン要素を持っています。

<button id="EditVal" name="EditVal" style="btn" value="Edit Debt">Edit Debt </button> 

私はライブメソッドを使用している場合、このコードは動作します:

$("#EditVal").live("click", function(e){ 
    alert('Edit this Val'); 
}) 

しかし、これは

$("#EditVal").on("click", function(e){ 
    alert('Edit this Val'); 
}) 

私が間違って何をしていないのですか?

+1

使用しているjQueryのバージョンは何ですか? 1.7以上であることを確認してください。 – ShankarSangoli

+0

私は1.7.1を使用しています。 –

答えて

3

はこれを試してみてください。 EditValがpageloadに存在しない場合、onがEditValで動作するように設定されている理由は次のとおりです。それは私が想定していないので、最初のページの読み込みの後半にバインドすることができるライブ関数が必要です。私はそれが最初の場所で生きている背後にある元の考えだと思う。あなたがライブではなくオンを使用している理由は何ですか?

+2

'live'ではなく' delegate'を使うべきです。 –

+0

ライブとデリゲートの機能を統合するために、jq 1.7のライブではなくonのほうが好ましい方法だと思いました –

+0

@MichaelBWです。 rich.okellyは、

9

bind()のようにon()を使用していますが、live()とは異なります。 live()ようにそれを使用するには、次のように記述する必要がありますパフォーマンス上の理由から、すなわちdelegate()代わりのlive()のようにそれを使用するために、代わりにdocumentの非動的祖先要素にon()を呼び出すことが望ましいですが、

$(document).on("click", "#EditVal", function(e) { 
    alert('Edit this Val'); 
}); 

注意を。

4

onを使用すると、ページの読み込み時にイベントが添付されます。コンテンツを動的に読み込んでいるときは、delegateと同じようにonを使用する必要があります。ハンドラを親要素に置き、フィルタリングセレクタを渡します。あなたが動的にページ上のHTML要素をドロップするなら、あなたはライブ必要

$("#ParentOfEditVal").on("click", "#EditVal", function(e){ 
    alert('Edit this Val'); 
}) 
2

.on()はイベントをDOM内のオブジェクトにバインドするというロジックです。次に、パラメータとしてセレクタを指定して、トリガするイベントの子要素を見つけます。

$("#parent_has_to_be_in_dom").on("click", "#myButton", function(event) { 
    // should work like live 
    alert("well hello"); 
}); 
関連する問題