1

我正在使用JQuery Form PluginJQuery 验证插件和 jqTransform 插件。

我有一个隐藏的表单,我可以看到它来添加或编辑东西。编辑或添加操作会触发下一个函数调用。

function activateAddForm(formId,callback) {
    $('#'+formId).jqTransform().validate({
            submitHandler: function(form) {
                $(form).ajaxSubmit( {
                    dataType: "json", 
                    success: function(json) {
                        callback(json);
                    }
                });                 
            }
        }); 
}

每个调用都有不同的参数。对于添加,我称之为

activateAddForm('add-new-form',addToy);

为了编辑,我称之为

activateAddForm('add-new-form',editToy);

这就是发生的事情:

  • 重新加载页面。
  • 编辑一个玩具。
  • 提交表格。
  • 调用 editToy 函数。
  • 尝试添加一些东西。
  • 函数 activateAddForm 使用 addToy 作为回调调用,但是一旦提交表单,就会调用 editToy 函数。

如果我在重新加载后做的第一件事是添加一个玩具。然后总是调用 addToy 函数。

我试过添加:

function activateAddForm(formId,callback) {
    $('#'+formId).ajaxFormUnbind();
    ...
}

或者

function activateAddForm(formId,callback) {
    $('#'+formId).resetForm();
    ...
}

但它没有工作。知道我能做什么吗?

变通方法试验

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 函数,然后调用 add 函数。

上述修复不起作用,但似乎方向正确。

还有什么想法吗?

4

4 回答 4

2

我认为如果您只是更改验证器的 submitHandler 而不是将其放入验证函数的参数中,它会简单得多。

$('#form').validate().settings.submitHandler = function () {
   // your function goes here.
}
$('#form').submit();
于 2011-01-18T08:30:48.093 回答
1

在检查了验证器插件的源代码后,似乎一旦调用了 validate() 函数,随后对 validate() 的调用就没有任何效果。

一种解决方法是在调用 validate() 之前调用以下命令:

$.removeData($('#'+formId)[0],'validator');

编辑:

再次检查您的代码,我认为我们需要更改策略:-)

function updateAddForm(formId,callback) {
$('#' + formId).data("successCallback",callback);
}

function initAddForm(formId) {
$('#'+formId).jqTransform()..validate({
        submitHandler: function(form) {
                $(form).ajaxSubmit( {
                        dataType: "json", 
                success: function(json) {
                        $('#'+formId).data("successCallback")(json);
                }
                        });                     
        }
    }); 
}

在开始时,您调用:

initAddForm('add-new-form');

要设置回调,请调用:

updateAddForm('add-new-form', addToy);

或者

updateAddForm('add-new-form', editToy);

这可能会奏效。

于 2009-06-07T17:39:54.527 回答
1
$('#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); }

           }
     });
于 2010-09-27T06:28:30.657 回答
0

没有足够的信息来回答您的问题。如果您在 firefox 中工作,请尝试安装 firebug 插件并尝试检查表单元素。

从这里的描述中,我可以看到您可能在同一页面上使用了两个具有相同 ID 的不同表单元素。我要做的第一件事是通过唯一的 ID 元素来区分表单,例如:edit-form add-form

只是一个想法,我希望有人会给你一个更好的答案。

于 2009-06-05T12:59:40.847 回答