2010-09-08 131 views
0

我正在使用ajaxform jQuery插件用于创建ajaxed HTML表单并希望使用jQuery实现验证Validation插件。在jQuery验证中使用ajaxform的最佳方法是什么?

我不知道什么是最好的方式来实现这一点。

它对我来说不起作用。我使用form.ajaxform({})设置了表单,然后使用form.validate({})设置了验证。 invalidHandler事件触发验证插件,但ajaxform仍提交表单。

如何正确连接两者?


我的代码:

_initializeValidation: function (form) { 

    var options = { 
     rules: 
      { 
       Name: 
       { 
        required: true 
       } 
      }, 
     messages: 
      { 
       Name: "Name is required", 
       ShortName: "Short name is required" 
      } 
    }; 

    if (form.find("#ShortName").length == 1) 
     $.extend(options.rules, { ShortName: { required: true} }); 

    form.validate(options); 
} 

/* 
* Initializes a newly loaded edit form 
*/ 
_initializeEdit: function (panel) { 
    var thisDetailTab = this; 
    var form = panel.find("form"); 
    form.ajaxForm(
     { 
      target: panel, 
      url: this._config.updateUrl, 
      beforeSubmit: function (arr, $form, options) { 
       return form.valid(); 
      }, 
      success: function (responseText, statusText, xhr, form) { 
       thisDetailTab._initializeDetails(panel); 
       thisDetailTab._config.refreshSummary(); 
      } 
     } 
    ); 

    this._initializeValidation(form); 

    var cancelButton = panel.find(".cancelButton"); 
    cancelButton.click(function (event) { 
     $.ajax(
      { 
       url: thisDetailTab._config.detailsUrl, 
       success: function (data) { 
        panel.empty(); 
        panel.append(data); 
        thisDetailTab._initializeDetails(panel); 
       } 
      } 
     ); 
    }); 
} 
+0

你能否粘贴一些关于你如何使用ajaxform的代码?我有验证插件的经验,但没有使用ajaxform :( – 2010-09-08 00:41:09

+0

我现在在beforeSubmit事件中添加了'valid()'调用,它似乎按照我的要求做,而且非常简单。这种方法是否正确?有什么缺陷吗?是否有更好的方法存在? – GiddyUpHorsey 2010-09-08 01:15:39

回答

1

相反的.ajaxForm(),请使用您的submitHandler(只成功火灾).ajaxSubmit(),就像这样:

$("form").validate({ 
    rules: { ... }, 
    submitHandler: function(form) { 
    $(form).ajaxSubmit({ ...options... }); 
    } 
}); 

这样它只会在验证成功时尝试进行AJAX提交(其他) rwise invalidHandler被解雇)。如果你想看一个生动的例子,这里是the related validation plugin demo

+0

在阅读您的答案之前,我给'beforeSubmit'添加了一个'.valid()'调用,看起来可以正常工作。你所描述的方法和我尝试过的方法? – GiddyUpHorsey 2010-09-08 01:17:29

+0

@GiddyUpHorsey - 无论哪种方式工作,除非你删除'submit'事件处理程序,否则你可能会运行两次验证,但通常是*好,如果效率低下的话。 – 2010-09-08 01:20:51

相关问题