私は ajax を介してフォームをロードしており、新しい .on() を使用して jQuery をロードしていますが、もう一度送信を押す前にプラグインがロードされていないことを確認します。と思う理由がわかりました。送信を押すと、 on() 関数がフォームに検証をロードします。これを修正する方法はありますか?以前は livequery を使用していましたが、jQuery 1.9.1 では機能しないか、少なくとも推奨されません。これが私のコードです:
$(document)
.on("submit",function(event){
$("#myform").validate();
event.preventDefault();
})
このコードは、以前は jQuery 1.4.2 で機能していました
$("#myform")
.livequery(function(){
$(this).validate():
})
したがって、フォームは送信されませんが、もう一度送信を押したときにのみエラーが表示されます。
更新: 新しい洞察をありがとうSparky! 私は以前のバージョンの jQuery で livequery に慣れていました。しかし、livequery は要素を常にリッスンしていて、クライアントに CPU 負荷をかけることを理解しています。jsfiddle のあなたのコードは、まさに私が望んでいることです!
では、生成されたフォームで .on() を使用しないでください。代わりに、コールバック内のフォームで validate() を実行します。このコードは機能します (もちろん document.ready 内で):
$("#ask").click(function(){
//send postdata from inputs, returns form with filled fields (defined with jQuery selectors)
$.post("include_form.lasso",{zip:zip,custno:custno},function(data){
// div"skjema" is filled with form with ID
$("#skjema").html(data);
})
.done(function() { $("#myform").validate();});
})
ここには示されていませんが、validate() には多くのエクストラがあります。私はこれをテストしていませんが、うまくいくと思います。ここで .post() コードの代わりに .ajax() を使用する方が良いですか? 私がしていることは、リンクがクリックされたときに、2 つのフィールド zip と custno を「include_form.lasso」に送信し、結果を「skjema」DIV に入力することです。これはフォームです - 生成されたフォームに validate() 関数を添付します - デフォルトの送信を防ぐためにフォームに stopPropogation() は必要ありませんか? 最初に検証する必要がありますか?
更新: Sparky からの大きな助けの後、ここで何が機能しますか:コードを共有したかっただけです。動的フォームには、validate() と autocomplete() の 2 つの関数が必要でした。そこで、validate() コードとオートコンプリートを 2 つの関数に入れました。
function pumpemod(){
$("#pumpemod").autocomplete({
source: "code/sql2.php?mod=1",
minLength: 3,
delay: 400}); }
function send_validate() { $("#my_dropdown").validate()...}
そのため、.on() コードで関数を呼び出します。ラジオ ボタンをクリックすると、フォームが取得されます。次のようになります。
$(document)
.on('click','input.montRadio',function(event){
var pnr = $("#postnr").val();
var knr = $(this).attr("rel");
$.post("code/vis_skjema.lasso",{postnr:pnr,kundenr:knr},function(data){
$("#skjema").html("/images/loading.gif");
$("#skjema").html(data);
pumpemod();
send_validate();
});
});
これが他の誰かを助けることを願っています。少なくとも、on() についてよく理解できました。livequery から on() に移行したかったのです。