为什么JQuery表单submitHandler不刷新其回调?
我正在使用、和jqTransform插件 我有一个隐藏的表单,我可以通过它来添加或编辑内容。编辑或添加操作将触发下一个函数调用为什么JQuery表单submitHandler不刷新其回调?,jquery,jquery-plugins,jquery-validate,jquery-forms-plugin,Jquery,Jquery Plugins,Jquery Validate,Jquery Forms Plugin,我正在使用、和jqTransform插件 我有一个隐藏的表单,我可以通过它来添加或编辑内容。编辑或添加操作将触发下一个函数调用 function activateAddForm(formId,callback) { $('#'+formId).jqTransform().validate({ submitHandler: function(form) { $(form).ajaxSubmit( {
function activateAddForm(formId,callback) {
$('#'+formId).jqTransform().validate({
submitHandler: function(form) {
$(form).ajaxSubmit( {
dataType: "json",
success: function(json) {
callback(json);
}
});
}
});
}
每个调用都有不同的参数。对于add,我称之为with
activateAddForm('add-new-form',addToy);
对于编辑,我称之为
activateAddForm('add-new-form',editToy);
情况就是这样:
- 重新加载页面
- 编辑一个玩具李>
- 提交表格
- 调用editToy函数李>
- 试着添加一些东西
- 函数activateAddForm通过addToy作为回调调用,但一旦表单提交,就会调用editToy函数
function activateAddForm(formId,callback) {
$('#'+formId).ajaxFormUnbind();
...
}
或
但它没有起作用。知道我能做什么吗
变通试验
Activa建议增加该行:
$.removeData($('#'+formId)[0],'validator');
function activateAddForm(formId,callback) {
$('#'+formId).jqTransform();
$.removeData($('#'+formId)[0],'validator');
$('#'+formId).validate({
submitHandler: function(form) {
$(form).ajaxSubmit( {
dataType: "json",
success: function(json) {
callback(json);
}
});
}
});
}
下一步:
- 重新加载页面。
- 编辑一个玩具
- 提交表格
- 调用editToy函数
- 试着添加一些东西
- 调用表单editToy function,然后调用add函数李>
还有什么想法吗?没有足够的信息来回答您的问题。如果您在firefox中工作, 尝试安装firebug插件并尝试检查表单元素 从这里的描述中,我可以看出您可能使用了两种不同的表单元素 在同一页上使用相同的ID。我要做的第一件事是通过 唯一ID元素,如: 编辑表格 添加表单
我只是想,希望有人能给你一个更好的答案。没有足够的信息来回答你的问题。如果您在firefox中工作, 尝试安装firebug插件并尝试检查表单元素 从这里的描述中,我可以看出您可能使用了两种不同的表单元素 在同一页上使用相同的ID。我要做的第一件事是通过 唯一ID元素,如: 编辑表格 添加表单
只是一个想法,我希望有人能给你一个更好的答案。检查验证程序插件的源代码后,似乎一旦调用validate()函数,对validate()的后续调用就没有效果了 解决方法是在调用validate()之前调用以下命令: 编辑: 再次检查您的代码,我认为我们需要更改策略:-) 开始时,您可以调用:
initAddForm('add-new-form');
updateAddForm('add-new-form', addToy);
要设置回调,请调用:
initAddForm('add-new-form');
updateAddForm('add-new-form', addToy);
或
这可能会奏效。在检查验证程序插件的源代码后,似乎一旦调用validate()函数,对validate()的后续调用就没有效果了
$('#comment').validate({
rules:{
comments:{required:true}
},
messages:{
comments:{required:'Please enter the comment' }
},
submitHandler: function(form) { //asynchronusly post the form data
var url=MAIN_SITE_URL+'rating/getrate/';
var comments=$('#comments').val();
url+='rating/comment/'+comments;
$.post(url,$('#rating').serialize(),
function(response){alert(response); }
}
});
解决方法是在调用validate()之前调用以下命令:
编辑:
再次检查您的代码,我认为我们需要更改策略:-)
开始时,您可以调用:
initAddForm('add-new-form');
updateAddForm('add-new-form', addToy);
要设置回调,请调用:
initAddForm('add-new-form');
updateAddForm('add-new-form', addToy);
或
这可能会起作用。我认为如果您只更改验证器的submitHandler,而不是将其放入validate函数的参数中,会简单得多
$('#comment').validate({
rules:{
comments:{required:true}
},
messages:{
comments:{required:'Please enter the comment' }
},
submitHandler: function(form) { //asynchronusly post the form data
var url=MAIN_SITE_URL+'rating/getrate/';
var comments=$('#comments').val();
url+='rating/comment/'+comments;
$.post(url,$('#rating').serialize(),
function(response){alert(response); }
}
});
$('#form').validate().settings.submitHandler = function () {
// your function goes here.
}
$('#form').submit();
我认为,如果您只是更改验证器的submitHandler,而不是将其放入validate函数的参数中,会简单得多
$('#form').validate().settings.submitHandler = function () {
// your function goes here.
}
$('#form').submit();
我安装了firebug插件并一直使用它我安装了firebug插件并一直使用它你介意添加一个链接到一个工作的演示页面,这样我们就可以看到你所有的代码、插件等一起工作吗?你介意添加一个链接到一个工作的演示页面,这样我们就可以看到你所有的代码、插件等一起工作吗?谢谢,我试过你的解决方法,它不起作用,但似乎朝着正确的方向发展。还有什么想法吗?谢谢,非常感谢。成功了!。如果你去西班牙,我请你喝杯啤酒。:-)如果你接近瓦伦西亚,我可以告诉你:)我接近马德里。我们没有sea,但它也很不错。谢谢,我尝试了你的解决方法,它不起作用,但似乎朝着正确的方向发展。还有什么想法吗?谢谢,非常感谢。成功了!。如果你去西班牙,我请你喝杯啤酒。:-)如果你接近瓦伦西亚,我可以告诉你:)我接近马德里。我们没有大海,但它也很好。