2011-06-18 5 views
5

jQueryを使用してkeyupイベントをトリガーして失敗しました。ここで jQueryがjQueryでアタッチされている場合にのみ、jQueryがキーアップイベントをトリガーします

は、私が input年代のいずれかに入力すると、それらの両方火災イベント、きれいな例

http://jsfiddle.net/xQcGM/2/

ですが、私はプログラム的にそれを発射しようとすると、($(element).trigger('event'))のみ秒1がトリガされしかし、私は両方を期待しています。

どこが恋しいですか?

UPD I ハンドラーの取り付け方法を変更できません!

+0

「プログラムで起動しようとすると」 - どういう意味ですか? – Webars

+0

良い質問があります。しかし、なぜあなたはあなたのイベントバインディングを混ぜているのですか?それとも、イベントをバインドする方法が違うのですか? –

+0

プログラムで@Webars = '$(要素).trigger( 'イベント')' – disfated

答えて

6

イベントを発生させるネイティブな方法は、dispatchEventを呼び出すことです。残念ながら、この方法はjQuery's sourceのどこにも表示されません。イベントオブジェクトを自分で作成し、手動でディスパッチする必要があります。

ここには、動作しているより長いバージョンのexampleがあります。

$('button').click(function() { 
     var myEvent = document.createEvent('KeyboardEvent'); 
     myEvent.initKeyboardEvent('keyup', true, true, null, false, 
           false, false, false, 76, 0); 
     $('input').each(function() { 
      this.dispatchEvent(myEvent); 
     }); 
    }); 

jQuery simulate pluginをご覧になると、少し楽になります。ここに別の作業をしている短いバージョンがあります。example

$('button').click(function() { 
    $('input').simulate('keyup'); 
}); 
+0

ありがとうございます、今はっきりしています。 これは必須ではありませんが、どうやらjQueryのトリガ機能を拡張して、それらの偽の 'KeyboardEvent'を内部でやることができますか? – disfated

+0

私はトリガのソースを見ていませんが、あなた自身のコードに置き換えるのはかなり簡単です。しかし、DOMイベントをjQueryイベントに正規化して、他のすべてのイベント処理が正常に動作することを確認し、そのイベントオブジェクトに適切なプロパティを設定し、ブラウザ間の問題を処理するという問題に対処する必要があります。このソリューションは、DOMイベントを直接送出してからjQueryの実装を呼び出すラッパーの作成と同じくらい単純ではありません。その場合、同じイベントが2回トリガーされます.1回はエレメントのすべてのイベント、もう一度はjQueryのバウンド・イベント – Anurag

関連する問題