如果表单字段未被修改,如何禁用jQuery中的提交按钮?
我有一个包含文本字段、复选框、单选按钮和提交按钮的HTML表单如果表单字段未被修改,如何禁用jQuery中的提交按钮?,jquery,html,forms,form-submit,Jquery,Html,Forms,Form Submit,我有一个包含文本字段、复选框、单选按钮和提交按钮的HTML表单 var isDirty = false; function SomethingChanged(){ if( !isDirty ) isDirty = true; btnSubmit.disabled = !isDirty; } 我希望只有当字段的内容被修改时,提交按钮才被启用。现在需要注意的是:如果用户将字段内容修改回原始值,那么表单按钮应该再次被禁用 原始字段值“foo”=>提交按钮被禁用 用户将字段值更改
var isDirty = false;
function SomethingChanged(){
if( !isDirty ) isDirty = true;
btnSubmit.disabled = !isDirty;
}
我希望只有当字段的内容被修改时,提交按钮才被启用。现在需要注意的是:如果用户将字段内容修改回原始值,那么表单按钮应该再次被禁用
编辑:我所要求的不能用简单的脏状态跟踪来完成。使用脏状态跟踪。将布尔值(例如IsDirty)附加到每个输入控件,并在值更改时进行切换。提交表单时,检查是否至少有一个或多个值已更改,然后提交表单。否则,将向用户显示警报 另一种解决方案是在控件值更改时调用公共函数。在该函数中,如果发生更改,可以将全局变量(IsDirty)设置为true,还可以启用/禁用submit按钮
var isDirty = false;
function SomethingChanged(){
if( !isDirty ) isDirty = true;
btnSubmit.disabled = !isDirty;
}
任何控件的通用函数
假设:将每个控件的初始值添加到属性“InitVal”
在上面的函数中,为了使其通用,您可以为每种类型的控件(如TextBoxChanged和DropDownChanged等)使用单独的函数,但每个控件上都有以下两个属性
这似乎是一个更好的答案
我没有测试下面的内容:-),但这就是你的意思吗
$(document).ready(function() {
$("#myform :input").attr("init",$(this).val()).bind("change.dirty", function(evt) {
if ($(this).val()!=$(this).attr("init")) $(this).addClass("dirty");
else $(this).removeClass("dirty");
$('#thebutton').attr("disabled",!$("#myform .dirty").size());
});
});
*-pike应该可以保存整个表单对象(或者按原样保存,或者使用.each()迭代并将数据存储在映射中),然后在提交时执行相同的操作并比较两个值。您可以改为使用plugin并将indicateDirtyForm:true设置为。现在,如果您的表单有“dirtyForm”类,则表示您有未保存的更改。您可以设置一个jquery脚本,在页面加载时扫描页面并检查表单,清点字段及其值,然后在更新输入时对照输入引用数组进行检查。如果用户将值更改回原始值,则这将不起作用,这种方法仍将设置脏位,在这种情况下,我需要禁用按钮。