【问题标题】:detecting submit button in jQuery validation's submitHandler在 jQuery 验证的 submitHandler 中检测提交按钮
【发布时间】:2012-09-25 21:14:08
【问题描述】:

我有一个需要一些验证后警告的表单。这个概念很简单,这些值是允许的,但超出了正常范围。处理方式是在验证 submitHandler 中:

$('form').validate({
    highlight: function (element, errorClass) {$(element).addClass("invalidElem");},
    unhighlight: function (element, errorClass) {$(element).removeClass("invalidElem");},
    errorPlacement: function (error, element) {element.parent().parent().next().children().last().append(error);},
    errorClass: "errorMsg",

    submitHandler: function (form) {

        if (!WeightsRangeValidator("Height", txtHeight, heightWarning)) {
            return false;
        }

        if (!WeightsRangeValidator("Weight", txtWeight, weightWarning)) {
            return false;
        }

        form.submit();
    }        
});

问题是表单上同时有提交和取消按钮。取消按钮确实具有“取消”类,因此不会执行验证。不过,submitHandler 函数仍在被调用。我认为必须有一种方法来检测正在单击哪个提交按钮以绕过 submitHandler 处理程序的内容。


这是一个工作的 jsFiddler:http://jsfiddle.net/scarleton/ZSVFP/

表单有三种有效状态:复选框(但不是两者)或文本框和下拉列表。单击“确定”时验证有效。问题出现在取消上。如果您在文本框中输入任何内容并按取消,验证仍会尝试验证。我尝试添加以下处理程序,如果表单有效,它允许取消,但如果在文本框中输入字母则不允许。

btnCancel.click(function () {
    txtHeight.rules("remove");
    txtWeight.rules("remove");
    ddlDevice.rules("remove");
    $("#form").submit();
});

【问题讨论】:

  • 您是否尝试在每个按钮上添加两个事件单击?并在提交 btn 调用 $('from').submit()?
  • jQuery 验证器能够以比这更简单的方式添加自定义规则 - stackoverflow.com/questions/241145/…

标签: jquery jquery-validate


【解决方案1】:
$('.submitBtn').on('click', function(){
    var $frm =  $ ("#form");
    $frm.validate()
    if($frm).valid()){
       submitHandler();
     $frm.submit()
    }
})

$('.cancel').on('click', function(){
   var $frm =  $ ("#form");
   if($frm.valid()){
    // Do Some action ...;
   }
})

您可以在buttonsm上添加点击事件,并且每次根据clikcef的按钮更改参数,有关更多详细信息,请参见示例 [演示][1]

查看 jquery 文档 http://docs.jquery.com/Plugins/Validation[1]:http://jsfiddle.net/abaksheyev/jKuVa/1/

还有更聪明的办法

submitHandler: function (form) {
      var val = $("input[type=submit][clicked=true]").val() // add this line to handler
  .......


//Add this into document.ready 
$("form input[type=submit]").click(function() {
    $("input[type=submit]", $(this).parents("form")).removeAttr("clicked");
    $(this).attr("clicked", "true");
});

【讨论】:

  • 表格有点复杂,请看添加的注释和jsfidler示例
  • 见演示。在此解决方案中,您将始终单击 btn
  • 我无法让 DEMO 运行,但第二个代码 sn-p 非常有意义,并且就像一个魅力。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多