0

次の HTML を検討してください。

<a href="#" id="aElement" data-bind="click: printId">
   <span id="spanElement">Click Me</span>
</a>

リンクをクリックすると、呼び出されるprintId関数があります。

printId: function (item, event) {

    vm.textTest(event.target.id);
}

event.target.id の値は aElement であると予想れます。これは、クリック バインディングが設定されている要素であるためですが、代わりにspanElementです。これが事実である理由はありますか?

クリックしている実際の「実体」がスパン要素であるためだと思いますが、コーディングの観点からは、代わりにアンカー要素を取得する方が理にかなっていると思います。結局のところ、アンカー タグ内に複数の要素が含まれている可能性があり、ユーザーがアンカー タグ内をクリックした場所に基づいてスローされる ID ではなく、毎回一貫して 1 つの ID を取得したい場合があります。

ただし、これはノックアウトの問題ではなく、JavaScript の問題である可能性があります。何かご意見は?

ここにフィドルがあります:

JS フィドルのデモ

4

3 に答える 3

2

スパンからのクリック イベントは、DOM をバブルアップします。イベント ハンドラーがアタッチされている要素を参照するため、event.currentTarget を使用します。

https://developer.mozilla.org/en-US/docs/Web/API/event.currentTarget

于 2013-08-08T14:19:54.107 に答える
2

これは JavaScript の問題event.targetです。クリックした実際の (最も内側の) アイテムであるため、スパンは です。

これを試してください - スパンの外側にテキストを追加してから、それをクリックしてください - event.target.id が aElement に移動することがわかります。

event.currentTarget実際にバインディングを配置したアイテムが必要な場合に使用します。event.currentTargetはイベントをリッスンする要素、 はイベントを受け取っevent.targetた要素です。

于 2013-08-08T14:20:09.023 に答える