2012-06-04 10 views
10

誰でもこのコードが機能しない理由を教えてもらえますか?jQueryトリガーがカスタムイベントのbind()またはon()で起動しない

$('body').on('test', function() { 
    alert('test'); 
}); 

$('body').trigger('test'); 

私はjqueryの-1.7.2.minを使用しています。私は何の誤りもなく、何も起こらない。

コードをインラインスクリプト内に入れてみましたが、$(document).ready()の中にはまだ何もありません。私もon()bind()の両方を試してみましたが、いずれも結果はありません。私はすべての例で同じ構文を示しているので、これとは何が違うのですか?

+0

ここではうまく動作しています。http://jsfiddle.net/joycse06/XXXhQ/ –

+0

あなたの構文はカスタムイベントで動作します – mprabhat

+0

Odd ..これらの例はすべて動作しますが、私のページには表示されません。今朝私のjQueryを1.6.4から1.7.2にアップデートしました。私のサーバーにはキャッシュの問題がありますか?私は 'on()'が1.7まで実装されていないことを理解しています。 – IamFace

答えて

8

DOMは何とか準備が整っているように見えます。インラインスクリプト内にコードを配置しても機能しません。 $('document').ready()の内側に配置すると、無名関数で動作しますが、何らかの理由ではないとの関数呼び出し「()」..のためにこのコードは

$(document).ready(start); 
function start(){ 
$('body').on('test', function() { 
    alert('test'); 
}); 

$('body').trigger('test'); 
} 

を働いていた。しかし、これは... *関数呼び出しを気付かなかっただろう括弧。

$(document).ready(start()); 
function start(){ 
$('body').on('test', function() { 
    alert('test'); 
}); 

$('body').trigger('test'); 
} 

正確な例では、jsfiddleに両方の方法を動作しますが、何らかの理由で唯一の方法は、私のサーバー上で動作します。なぜ私はこのコードが実際に動作しているのか、私のものには何か変わった異常があることがわかります。/

+8

意味的に間違っているからです。 start()は、start関数の戻り値を渡します。 startは、ドキュメントの準備ができたときに実行される関数を渡します。通常、人々は匿名関数を渡します:$(function(){/ *私のものはここです* /}); – Jeff

+0

@Jeff +1ありがとう – Chris22

+0

ありがとう、これは私のためにも働いた。 "on"宣言の周りにドキュメントを追加すると効果がありました! –

1

委任を試してみてください。

$(document).on('test', 'body', function() { 
    alert('test'); 
}); 

$('body').trigger('test'); 

これは(ライブのように動作しますが)を使用しています。 http://api.jquery.com/live/

+0

あなたはOPが望むものを反映していません。 OPの問題はデリゲートではありませんが、カスタムイベント – thecodeparadox

+1

これはカスタムイベントです。自分のコードが正しいかどうかはわかりますが、時には直接バインディングではなく、このようなイベント(カスタムイベントでも)をバインドする方が簡単です。ドキュメントから:イベントハンドラは現在選択されている要素にのみバインドされています。コードが.on()を呼び出した時点でページに存在していなければなりません。もちろん身体は存在するはずですが、私たちが見ることのできない状況では何か変わったことが起こっています。これはそれを克服します。 (理論的には)。 ;) – Jeff

関連する問題