2017-11-16 16 views
-1

イベントハンドラを使用してメッセージを変更しましたが、リンクをクリックしてもメッセージは変更されません。あなたがアンカータグのテキストを変更したい場合は、あなたがそうlike thisを行うことができますjqueryイベントハンドラが値を変更しないのはなぜですか?

$("a").bind("click", { message : msg }, function(event) { 
    msg = "Changed msg"; 
    alert(event.data.message); 
    }); 
+1

...これはどのように動作するのではないのですか?変数の値を任意に設定し、オブジェクトのプロパティを変更することはできません。まあ、私はあなたがそれを期待できると思いますが、あなたは間違っているでしょう。 –

+0

http://api.jquery.com/bind/ eventDataについてのセクションを読んでください、それはあなたがそれが – Huangism

+0

ああだとは思わない。私はそれが正常な変数のように動作すると思った。任意の値を代入して変更することはできません。 –

答えて

1

:ここ

<a href="javascript:void(0);">Test 1</a> 
<a href="javascript:void(0);">Test 2</a> 

のJavaScriptファイルです

$("a").bind("click", function(event) { 
    $(event.target).text('Changed msg'); 
}); 

これはと短絡することができますthisはイベントハンドラ内でevent.targetを参照するか、関数にバインドしたもの(アンカータグ)を参照します。したがって、次のように書くことができます。

$("a").bind("click", function() { 
    $(this).text('Changed msg'); 
}); 

ドキュメントオブジェクトモデル(DOM)を変更するための値を設定することはできません。 jQueryに何をしたいかを伝えるには、texthtmlのようなメソッドを使用する必要があります。 vanilla JavaScriptでこれを行うことができます。

コメントに記載されているように、eventDataは、イベントハンドラに長く渡すことができるオブジェクトです。しかし、それは変えたり、変えたりすることはできません。

+0

または単に '$(this) 'を使用してください – Huangism

+0

@Cymen私のコードで何が問題になっていますか?なぜ私はこのように割り当てて値を変更できないのですか?私に教えてもらえますか? –

+0

@TazbirulHaqueあなたがバインド機能に無作為にパラメータを追加しているので、 –

関連する問題