【发布时间】:2014-07-20 07:27:37
【问题描述】:
我正在寻求有关如何解决此问题的帮助。以下摘录是表单上“保存”按钮的单击处理程序,该表单具有可变布局,具体取决于要保存的文档类型。使用 jquery 验证,我在自己的自定义对象中设置了不同的规则集,并且一切正常。
此应用程序中的文档都与人员记录相关联,并且在我尝试过的所有其他人员记录中,文档已保存,但在一种情况下,保存按钮触发事件,表单验证没有问题,并且处理程序返回 true。
在 Chrome 中单步执行时,我可以看到事件对象的 defaultprevented 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("ctl00$ContentPlaceHolder1$tabContainer$tabDocs$uctlDocs$btnDocSave", "", true, "", "", false, false))" id="ctl00_ContentPlaceHolder1_tabContainer_tabDocs_uctlDocs_btnDocSave">
编辑:
因此,将人员记录复制回同一个表中,使其具有不同的 ID,然后使用新 ID 更新所有相关行。我遇到了同样的问题。所以数据中肯定有一些东西把事情搞砸了,对吧?
我正在将相关记录恢复为原始 ID,并重新尝试查看导致问题的记录。它仍然可能是人员记录本身中的一列,但我试图避免一一更新。
【问题讨论】:
-
您的“保存”按钮也是提交按钮吗?
<input type="submit">?你也可以显示你的 HTML 吗? -
为什么要退货?你的
e.preventDefaults在所有错误的地方应该停止处理表单 -
这是我的想法。这只是偏执狂,我在那里添加了那些因为我想强制返回 true,以防有什么干扰它。
-
WebForm_DoPostBackWithOptions()似乎正在处理您的Save按钮单击,与您自己的单击处理程序并行。当然,您应该转而使用WebForm_DoPostBackWithOptions吗? -
您的意思是直接调用它并从非 asp.net 按钮将我自己的回发到服务器端处理程序?我想我可以,但这适用于 5000 条记录中的 4999 条。还有其他想法吗?我已经取得了一些进展,但我会用它来更新问题。
标签: jquery forms button onclick