jquery click事件返回true但未提交表单

时间:2014-05-30 13:52:37

标签: jquery forms button onclick

我正在寻找一些帮助来解决这个问题。以下摘录是窗体上“保存”按钮的单击处理程序,该窗体具有可变布局,具体取决于要保存的文档类型。使用jquery验证我在自己的自定义对象中设置了不同的规则集,它们都运行得很好。

此应用程序中的文档都与个人记录相关联,并且在我尝试的每个其他人的记录中,文档被保存但在一个案例中,“保存”按钮触发事件,表单验证没有问题并且处理程序返回true。

在Chrome中单步执行时,我可以看到事件对象的默认值为false。没有错误输出到控制台。但是回发不会发生。

几乎不可能指望任何人都可以告诉我这里究竟出了什么问题,但是我在接下来要去哪儿看错了。我已将用于填充表单的存储过程的输出与每个人的ID进行比较,并且可以看到从数据库返回的任何可疑内容。

非常感谢任何帮助。

    $(idoc.$.SaveButton).off('click').click(function (e) {
        var rv = true;

        $('.idoc-msg-bar').html('').hide();

        // what kind of document are we saving?
        var docType = $(idoc.$.DocTypeDDL).find(':selected').attr('value');
        // get the DocumentType object that knows what to validate
        var dt = idoc.getDocTypeLayout(docType);

        $('form').validate().settings.rules =  dt.ValidatorRules;
        // debug - dump the rules as the validator sees them
        //for (var r in $('form').validate().settings.rules) 
        //    for (var c in $('form').validate().settings.rules[r])
        //        console.log(r + ' --> ' + c + ' --> ' + $('form').validate().settings.rules[r][c]);

        if ($('form').valid()) {
            // get confirmation to overwrite CV if need be
            if ([idoc.DocType.CVVelosiFormat, idoc.DocType.OriginalCV].indexOf(dt.Value) >= 0) {
                $('.idoc-msg-bar').html(idoc.MSG.CVNotes).addClass('required-rel');

                var chk = $(idoc.$.ChkOverwriteCV);
                if (typeof (chk) != 'undefined') {
                    if ($(chk).is(":visible")) {
                        if ($(chk).is(":checked")) {
                            // proceed to server side validation rules
                        } else {
                            $('.idoc-msg-bar').effect('highlight', {}, 3000);
                            e.preventDefault();
                            rv = false;
                        }
                    }
                    else {

                        $('.idoc-msg-bar').show().effect('highlight', {}, 3000);
                        e.preventDefault();
                        rv = false;
                    }
                }
            }
        }
        else {
            e.preventDefault();
            rv = false;
        }

        return rv;
    });

修改

道歉,是的,我的意思也包括html:

<input type="submit" name="ctl00$ContentPlaceHolder1$tabContainer$tabDocs$uctlDocs$btnDocSave" value="Save" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ctl00$ContentPlaceHolder1$tabContainer$tabDocs$uctlDocs$btnDocSave&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="ctl00_ContentPlaceHolder1_tabContainer_tabDocs_uctlDocs_btnDocSave">

修改

因此将人员记录复制回同一个表中,以便它具有不同的ID,然后使用新ID更新所有相关行。我遇到了同样的问题。所以数据中确实有一些东西搞砸了,对吗?

我正在将相关记录恢复为原始ID并重试以查看导致问题的记录。它可能仍然是人物记录中的一列,但我试图避免逐个更新。

1 个答案:

答案 0 :(得分:0)

这个字段组以更大的形式显示在选项卡上。其中一个选项卡上的字段使用了一个用户控件,该控件具有切换控件是否具有RequiredFieldValidator的属性。出于某种原因,这被触发了。由于我的文档表单没有使用ASP.NET客户端验证,我只是在文档表单中添加“CausesValidation = false”,问题就消失了。

所以 - 任何有这种奇怪的人 - 检查你的其他控件以进行客户端验证,验证组等,如果你没有使用ASP.NET的客户端验证,请在提交按钮上明确关闭它。可以节省3天和一个新的光头补丁: - )