0

ページがajax経由でロードされているときに、jqueryトリガーイベントを発生させるのに苦労しています。別のphpファイルでフォームを呼び出すために使用するjquery ajax呼び出しを使用するWebページがあります

$('#orderFormPlace').load('orderForm.php');

この PHP ページには、「checkMe」クラスのフォーム オブジェクトに添付された変更イベントがあります。

これらのフォーム オブジェクトは動的に入力されるため、これがこのために設定したものです。

$( "table" ).delegate( ".checkMe", "change", function( e )

作業を開始する必要があるのは、イベントをトリガーする次のコードです。

$("[id=vendor1]";).val($("[id=vendor1]").val()).focus().trigger("change");

謎は...同じスクリプトでそれを使用すると機能しますが、AJAX呼び出し(jquery .load関数)によって呼び出されている場合は機能しません。

AJAX 経由でロードすると機能しないのはなぜですか?

これを見つけて、回避策があると主張していますが、それがあると主張するデモや例はありません。javascript document.getElementByID の使用と jquery .index() の使用に関する何か。私はそれをいじってみましたが、javascript getElementByID で .index() をセレクターとして使用する方法がわかりません。

今知りたいのは……これはなんの魔術なの!?!?

お時間をいただきありがとうございます。


編集:同じことを行うために変更をトリガーしようとする代わりに、コードをハードコーディングすることで問題を解決しました。しかし、なぜそれが起こっているのかという疑問は残ります。

4

1 に答える 1

0

orderForm.phpAjax リクエストが実行されたときに実行するJavaScript コードを で生成していると思います。

マークアップとスクリプトを分離する方がはるかに簡単だと思います。ファイルorderForm.phpに必要なマークアップのみを配信させてから、メイン スクリプトから (新しく読み込まれた) 要素にイベント ハンドラーをアタッチします。

Ajax を使用してさらにいくつかの要素をロードすると、古い要素にはイベント ハンドラーがアタッチされ、新しい要素にはアタッチされないという状況になる可能性があります。それらをすべてクリアして各要素に再割り当てするか、jQuery の live() 関数を使用するか、または、イベント ハンドラーを親要素にのみ割り当てることを検討し、event.target を介して最初にアドレス指定された要素を確認し、イベントハンドラーの総数が大幅に増加します(「イベント委任」)。

また、提供されたコード スニペットに関して質問があります。

$("[id=vendor1]";).val($("[id=vendor1]").val()).focus().trigger("change");

を取り除き、;に置き換えましょう:id=#

$("#vendor1").val( $("#vendor1").val() ).focus().trigger("change");

valの値をの値に設定するのはなぜvalですか?

于 2013-01-17T03:35:26.143 に答える