如何在jQuery Validation的rules中判断点击的提交按钮
解决jQuery Validation规则中判断点击提交按钮的问题
直接上可行方案,不用改按钮类型,也能让rules里拿到点击的按钮标识:
添加隐藏字段存储操作类型
在表单里加一个隐藏输入框,用来记录用户点击的是提交还是保存草稿:<input type="hidden" id="actionType" name="actionType">绑定提交按钮的点击事件,提前设置标识
给所有提交类型的按钮绑定点击事件,在验证触发前把按钮的name值存入隐藏字段:$('button[type="submit"]').click(function() { $('#actionType').val($(this).attr('name')); });注意这段代码要放在表单初始化验证之前,或者包裹在DOM ready回调里。
在rules中动态判断必填条件
给certifyStmt字段的required规则用函数形式,根据隐藏字段的值动态返回是否需要必填:$('#yourFormId').validate({ rules: { certifyStmt: { required: function() { // 替换成你实际的提交按钮name,比如"submit" return $('#actionType').val() === "submit"; } } }, submitHandler: function(form) { // 这里依然可以用你之前的方式确认按钮 console.log($(this.submitButton).attr('name')); form.submit(); } });
为什么之前的隐藏字段方案没生效?
大概率是事件绑定时机不对,或者验证触发时隐藏字段还没被赋值。直接绑定submit按钮的click事件,会在Validation的验证逻辑之前执行,确保rules读取时已经拿到了正确的按钮标识。另外,不要在rules里尝试用this.submitButton——这个是submitHandler阶段才会被赋值的内部属性,验证阶段根本拿不到值。
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

