为什么JQuery表单submitHandler不刷新其回调?

为什么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( {

我正在使用、和jqTransform插件

我有一个隐藏的表单,我可以通过它来添加或编辑内容。编辑或添加操作将触发下一个函数调用

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函数
如果重新加载后我做的第一件事是添加玩具。然后始终调用addToy函数

我尝试补充:

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,但它也很不错。谢谢,我尝试了你的解决方法,它不起作用,但似乎朝着正确的方向发展。还有什么想法吗?谢谢,非常感谢。成功了!。如果你去西班牙,我请你喝杯啤酒。:-)如果你接近瓦伦西亚,我可以告诉你:)我接近马德里。我们没有大海,但它也很好。