2011-12-19 6 views
1

MooToolsイベント委譲:コールバック内で子要素を参照する方法HTMLのこの部分を持つ

<div id="modal"> 
    <select class="country"> 
     <option value=""></option> 
     <option value="opt">Opt</option> 
    </select> 
</div> 

そしてJSのこの作品:

$('modal').addEvent('change:relay(.country)', function(){ 
    console.log(this); // "this" refers to #modal. 
}).fireEvent('change:relay(.country)'); 

ログthisキーワードが#modal要素を参照することが明らかになりました。私はそれぞれの.country selectのイベントを起動し、コールバック内の各イベントへの参照を持っていきたいと思います。どうすればいいですか? これはフィドルです:http://jsfiddle.net/EWUCG/5/ 多くの感謝! IRCチャンネルでチャットから

+0

私は同じ問題を抱えていました。ここには、たとえこのスレッドがおそらく死んでいても、行く方法があります... http://stackoverflow.com/questions/2689010/mootools-programmatically-fired-events-not-working-with-event-delegation?rq=1 – zhealot

答えて

0

これは後に...私は上のIRCでこれを取り上げているものもあり誰がそれを提供したかをあなたに伝えることはできません。

http://jsfiddle.net/prbNK/7/

、より良いコードの再利用のための要素法 - http://jsfiddle.net/prbNK/12/

+0

ありがとう、これは私が探していたものです! –

+0

問題ありません。持っていると便利なコードです;) –

0
$$('.country').addEvent('change', function(){ 

    console.log(this); 
    // "this" refers to select 

    console.log(this.getElement(':selected')); 
    // this.getElement(':selected') refers to selected option 

}).fireEvent('change'); 
+0

それは私が必要なものではありません。私はMooToolsの基本イベントを知っています。中継されたイベントを持つ新しいイベント委任システムについて話しています。 –

1

は:

  • イベントの代表団は、イベントバブルのオフに基づいています。
  • 親の中の要素がイベントをトリガーします。それは親ノードのイベントをトリガーします...
  • これ以上親(ウィンドウ)がなくなるまでそれを行います
  • 親の1人が受け取ったときにコールバックを設定するだけですそのイベントはその子供から渡されました。

私が残した唯一の解決策は、「eaching」されています

$('modal').addEvent('change:relay(.country)', function(event, target){ 
    console.log(this, event, target); // Then "this" refers to each .country select. 
}); 
$$('.country').each(function(el){ 
    $('modal').fireEvent('change', [null, el]); 
}); 

フィドル:http://jsfiddle.net/EWUCG/12/

+0

**選択**の**オプション**を手動で変更する場合**この**内部ハンドラ関数は**選択**要素を参照します。 – Diode

+0

@Diode、はい、私は選択をクリックし、マウスでオプションを選択することについて話していません。私はJSを襲ってイベントを起こすことを話している。とにかくありがとう。 –

関連する問題