jquery.form / validate插件仅允许在输入更改时提交
我想使用jQuery.Form / Validate插件,只允许在任何输入实际更改时提交我的表单。
使用beforeSubmit:
:: http://jquery.malsup.com/form/#options-object有回调逻辑。 但是,我似乎无法使其发挥作用。
这是我到目前为止所拥有的:
$(document.body).on('click', 'input[type="submit"]', function(){ var $form =$('form'); $form.validate({ submitHandler: function($form) { $($form).ajaxSubmit({ beforeSubmit: function(arr, $form){ var value = '', storedValue=''; $($form+':input').each(function (index, el) { value=$(el).val(); storedValue=$(el).data("stored"); if(value!=storedValue){ console.log("Changed"); return true; } else { return false; console.log("NOT changed"); } }); ...success handling, etc.. beforeSubmit: function(arr, $form) { var value = '', storedValue=''; $($form+':input').each(function (index, this) { value=this.value; storedValue=$(this).data("stored"); if(value!=storedValue){ console.log("Changed");return true; } else { return false; console.log("NOT changed"); } }); }
这是HTML:
目前,console.log显示"Changed"
,无论storedValue
是否与输入相等。
首先,它永远不会显示“未更改”,因为它在击中该部分之前returns false
。 您应该过滤掉提交按钮,因为您可能没有检查其值。
$($form+':input').not(':submit').each(function(index, this) { value = this.value; storedValue = $(this).data("stored"); if (value != storedValue) { console.log("Changed"); return true; } else { console.log("NOT changed"); return false; } });
更新在@wirey的大力帮助下,我们(@timrpeterson和@wirey)共同制定了一个解决方案。 我不是在each()
循环中返回true / false,而是在each()
循环之后递增一个值totalChanged
并进行评估,无论它是否大于0。
这是代码:
beforeSubmit: function(arr, $form){ var value = '', storedValue='', totalChanged=0; $('#myForm :input').not(':submit,:hidden').each(function (i, el) { //console.log($(this)); console.log($($form)); value=$(el).val(); storedValue=$(el).data("stored"); if (value != storedValue) { totalChanged++; } else { } }); //each if(totalChanged>0){ console.log("at least one changed"); return true; } else{ console.log("All NOT changed"); return false; } } //beforeSubmit