特にライブに関してはちょっと……。
jQuery('.something').live('click', function() {
jQuery(this).parent('form').reset();
});
親関数に興味がありますが、これもうまくいくと思います:
jQuery('.something').live('click', function() {
this.form.reset();
});
特にライブに関してはちょっと……。
jQuery('.something').live('click', function() {
jQuery(this).parent('form').reset();
});
親関数に興味がありますが、これもうまくいくと思います:
jQuery('.something').live('click', function() {
this.form.reset();
});
Prototype は現在「ライブ」サポートを持っていません。ただし、イベント委任でも同様のことができます。ここで、親要素のイベントを監視し、イベント ハンドラーでイベントが実際に発生した子要素を見つけます。
$('theFormID').observe('click', handleFormClick);
function handleFormClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement();
}
イベント委任は、バブリングするイベント (「クリック」など) でのみ可能です。jQuery のライブ機能に同じ問題があるかどうかはわかりません。
1 つの良い点は、CSS セレクターを に渡すことができることですEvent#findElement
。
$('tbodyID').observe('click', handleTableClick);
function handleTableClick(event) {
var element;
// Get the element on which the click occurred
element = event.findElement('tr');
}
tr
...これは、実際のクリックが 内の 内で発生した場合でも、クリックされたspan
を検索します。td
tr
イベント委任を適切に使用すると、特に要素を動的に追加および削除する場合に、要素のフック/フック解除を大幅に簡素化できます。
「ライブ」サポートを行う Prototype のプラグインがあっても驚かないでしょう。
クリックされたコントロールの親を取得したいとおっしゃいました。Prototype でハンドラーを接続すると、デフォルトではthis
、イベント ハンドラーを設定した要素をハンドラー内で参照するように設定されます。たとえば、div
idの がある場合foo
:
$('foo').observe('click', function(event) {
// Here, `this` will refer to the `foo` element
});
その後、Prototype のElement#upを使用して親要素を取得できます。(イベント委任を使用していて、最初に親this
にイベントをフックする場合は、もちろん直接使用し、クリックされたものへの参照も取得する必要がある場合は#findElement
、上記のように使用します。)