クリック イベントで空白の文字列 "" が返されるのはなぜですか?
function saveSelection()
{
var selectedValue = $(this).text(); // --> is ""
}
為に
<ul>
<li data-bind="item" onclick="saveSelection();">Value1</li>
</ul>
クリック イベントで空白の文字列 "" が返されるのはなぜですか?
function saveSelection()
{
var selectedValue = $(this).text(); // --> is ""
}
為に
<ul>
<li data-bind="item" onclick="saveSelection();">Value1</li>
</ul>
ちょうど私の2セント...
Cation: jQuery に飛び込むこの回答は、jQuery の「マークアップ」での他のアイテムの使用を参照する場合があります。これは、彼らがシステムを発明したという意味ではなく、システムを改善したということです。注意: これは、「全員」が利用可能なパワーを学習できるように、「素人の言葉」で綴られる場合があります。
この間違いを正す方法はいくつかありますが、それぞれに長所と短所があります。
this
最初の明白な点は、すでに示唆されているように、単純にパラメーターとして渡すことです。これに対する長所は、古き良きインライン編集です。その各行がどこに書かれているかを正確に知っています。短所はたくさんあります。まず第一に、その関数名を変更する場合は、それが呼び出されるすべての場所で変更する必要があり、インライン編集を使用すると、多くの場所になる可能性があります。また、動的な状態を保ち、自由に「簡単に」変更できるという柔軟性も失います。リストは延々と続きますが、簡単に言えば、これが「古い」方法と呼ばれる理由があります。
使い方:
// here "this" is passed as a parameter/argument to the method you're calling
<li data-bind="item" onclick="saveSelection(this);">Value1</li>
// so in your method, simply get the parameter or argument
function saveSelection(element)
もう 1 つの方法は、古き良き jQuery .click() メソッドを使用することです。もちろん、これにはそれを適用する要素を知る必要があります。あなたは少しあいまいに見えますが、それには譲歩があります。「データバインド」プロパティ。このプロパティを使用して、そのプロパティを含むすべての li を取得し、それらにクリック メソッドを割り当てることができます。ただし、このようにすると、パラメーターは「this」ではなく jQuery イベント オブジェクトになります。ただし、「this」はまだ暗示されているため、関数内にまだ存在しています。ここのプロは「これ」を渡す必要はありません。すでにあります。このコードの実行後に data-bind=item を含む li が追加された場合、「パーティーに遅れる」ため、このメソッドは割り当てられません。
$("li[data-bind=item]").click(saveSelection);
// Also same as
$("li[data-bind=item]").on("click", saveSelection);
最後に、より良い解決策です。最後に述べた before メソッドには、「 delegate 」と呼ばれる「代替」バージョンが含まれています。これにより、セレクターのすべての要素がいつ作成されたかに関係なく、イベントを設定することができます! これは、セレクターを含む後半の li 要素でさえ、クリック メソッドが割り当てられることを意味します! 私が考えることができる唯一の詐欺は、この呼び出しが行われる前に存在しなければならない親 ID を使用する場合にのみ最適に機能するようです。親は子の直接の親である必要があります。
// In other words it works like this
$("#parentID").on("click", ".child-class", function(e) {});
たとえば、UL に「bob」という ID を割り当てた場合、次のようになります。
$("#bob").on("click", "li[data-bind=item]", saveSelection);
もちろん、関数のパラメーターも変更されます。
function saveSelection(event) {
var $this = $(this); // note, this is already passed through!!!
jQuery には、「正しい」解決策はなく、機会があるだけです。座ってリラックスし、いくつかのことを試して、ニーズに最適なものを見つけてください! 楽しみ!