0

クリック イベントで空白の文字列 "" が返されるのはなぜですか?

function saveSelection()
{
    var selectedValue = $(this).text(); // --> is ""
}

為に

<ul>
   <li data-bind="item" onclick="saveSelection();">Value1</li>
</ul>
4

4 に答える 4

0

ちょうど私の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 には、「正しい」解決策はなく、機会があるだけです。座ってリラックスし、いくつかのことを試して、ニーズに最適なものを見つけてください! 楽しみ!

于 2013-05-06T22:39:11.557 に答える