1

特にライブに関してはちょっと……。

 jQuery('.something').live('click', function() {
     jQuery(this).parent('form').reset();
 });

親関数に興味がありますが、これもうまくいくと思います:

 jQuery('.something').live('click', function() {
     this.form.reset();
 });
4

1 に答える 1

3

ライブ

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を検索します。tdtr

イベント委任を適切に使用すると、特に要素を動的に追加および削除する場合に、要素のフック/フック解除を大幅に簡素化できます。

「ライブ」サポートを行う Prototype のプラグインがあっても驚かないでしょう。

クリックされたコントロールの親を取得したいとおっしゃいました。Prototype でハンドラーを接続すると、デフォルトではthis、イベント ハンドラーを設定した要素をハンドラー内で参照するように設定されます。たとえば、dividの がある場合foo:

$('foo').observe('click', function(event) {
    // Here, `this` will refer to the `foo` element
});

その後、Prototype のElement#upを使用して親要素を取得できます。(イベント委任を使用していて、最初に親thisにイベントをフックする場合は、もちろん直接使用し、クリックされたものへの参照も取得する必要がある場合は#findElement、上記のように使用します。)

于 2010-03-10T15:41:01.263 に答える