我正在通过 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 一直在监听元素并将 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() 中有很多额外的东西,这里没有显示。我没有对此进行测试,但我想它会起作用。在这里使用 .ajax() 而不是我的 .post() 代码更好吗?我所做的是 - 单击链接时,将两个字段 zip 和 custno 发送到“include_form.lasso” - 将结果填充到“skjema” DIV 中。这是一个表单 - 将 validate() 函数附加到生成的表单 - 我不需要在表单上使用 stopPropogation() 来防止默认提交?它应该首先验证吗?
更新: 在 Sparky 的大力帮助下,这里是可行的:只是想分享我的代码。我的动态表单需要 2 个函数,validate() 和 autocomplete()。所以我把 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()。