在提交表单后,如何让我的jQuery Validator Code第二次运行?
这是场景。
用户填写表单。 他忘记了一些必要的信息。 我的validation码向用户表明需要缺少字段。 他完全填写表格并提交。 Presto它的工作原理。
现在,用户手动删除必填字段并再次点击提交。 Presto它的工作原理(IT SHOUDLNT)。 如何让我的validation第二次工作以防止提交空字段? 这是我的代码。 它只适用于表单提交的1次迭代。 所有后续提交都忽略了我的validation。
谢谢…
//Validation $('#CommentsForm').validate({ rules: { Author: "required", Message: "required" }, messages: { Author: "Author is required.", Message: "Comment is required." }, errorContainer: "#CommentsErrorBox", errorLabelContainer: "#CommentsErrorBox ul", wrapper: "li" }); //User Clicked Submit Button $('#CommentsForm').live('submit', function (e) { e.preventDefault(); //Prevent Browser from getting new url //Create JSON object var jsonCommentData = { ID: $('#HiddenID').val(), Author: $('#Author').val(), Message: $('#Message').val() } //Add the comment. $.ajax({ url: '/Home/_CommentsAdd', type: 'POST', data: JSON.stringify(jsonCommentData), dataType: 'html', contentType: 'application/json', //The request was a success. Repopulate the div with new result set. success: function (data) { $('#AjaxComments').html(data); $('abbr.timeago').timeago(); //update the timestamp with timeago //Change colors of message. if ($('#CommentStatus').html() == "Your Comment Has Been Added!") { $('#CommentStatus').css('color', 'GREEN'); } }, error: function (data) { alert('Fail'); } }); });
这是我的部分观点:_评论
@model DH.ViewModels.CommentsViewModel @{ //No Comments Yet if (Model.CommentStatus.Length > 0) { @Model.CommentStatus } foreach (var item in Model.Comment) { 8 @item.Author @item.MessageDate @item.Message } } @{ //Setting up Increments of 10 Pagination links int StartPage; int EndPage; int PageNumber = Model.PageNumber; int PageCount = Model.PageCount; if (PageCount < 10) { StartPage = 1; EndPage = PageCount; } else { if (PageNumber PageCount) { EndPage = PageCount; StartPage = EndPage - 9; } } } //Display "Page of" if there are comments. if (@Model.PageCount > 0) { Page @Model.PageNumber of @Model.PageCount } //Set up First and Prev arrow links if (Model.PageNumber > 1) { < Prev } //Loop through and create the page #'s. for (var PageCounter = StartPage; PageCounter <= EndPage; PageCounter++) { //Display the Page # in a Black Box if (PageCounter == PageNumber) { @PageNumber } //Create the Page # Links. else { @PageCounter } } //Set up Next and Last arrow links if (Model.PageNumber < Model.PageCount) { Next > } }
您的问题完全取决于您的实施。
页面加载时会出现以下情况,使您的表单在第一次提交时成功运行…
var validator = form.validate({ rules: { Author: "required", etc....
然后,因为你已经在提交处理程序中再次包含它,它在这里重新初始化…
form.live('submit', function (e) { e.preventDefault(); //Prevent Browser from getting new url $(this).validate();
…为下次提交打破它。
您需要做的就是初始化一次 (包括所有选项)而不是在提交处理程序中…
$('#CommentsForm').validate({ rules: { Author: "required", etc....
请参阅这些官方演示的源代码。
编辑:
同样,您不需要提交处理程序,因为它会干扰您的表单提交。
换句话说,您的validation工作正常,但是当您点击“提交”时,您的外部提交处理程序函数将完全接管,因此毫无疑问validation会开始失败。
正如我在原始评论中提到的,Validation插件内置了一个提交处理程序来处理包括你的ajax在内的所有内容。
完全删除所有这些……
form.live('submit', function (e) { ....
然后在 validate()
函数中,你只需根据作为第二个选项列出的插件文档添加一个提交处理程序……
$('#CommentsForm').validate({ rules: { Author: "required", /// etc.... }, submitHandler: function(form) { /// put all your ajax and such in here } });
Interesting Posts
为什么要将空对象传递给jQuery的extend方法?
使用jQuery-toggles的数据表不能在第1页以外的页面上工作
代码在JSFiddle和Codepen中工作,但在浏览器中没有,我哪里出错了?
Jquery:替换表列内的span的内容
jQuery UI,Draggable,Droppable,Auto Scroll
Fancybox导航箭头和关闭按钮没有透明的hover
选择文本,然后用Javascript计算它与顶部的距离?
使用jquery contains更改div中文本的颜色
jQuery.getJSON:如何避免每次刷新时请求json文件? (高速缓存)
第二个选择框从jquery中的第一个选择框填充