Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测表单中的数据是否已更改?MVC_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

Javascript 如何检测表单中的数据是否已更改?MVC

Javascript 如何检测表单中的数据是否已更改?MVC,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,注意:我已经在这个论坛上看到了一些解决方案,但它们不适用于我的具体情况 在我的应用程序中,用户总是使用模式窗口编辑数据。当模式第一次打开时,只有一个“关闭”按钮可见。如果用户更改任何文本,此按钮将立即隐藏,“取消”和“保存”按钮将可见。据我所知,实现此方法的唯一方法是将事件连接到所有文本控件。文本控件的数量因表单而异,但不超过50个。我需要“id”并将“change”事件放入表单中的每个控件中。我的问题是,有没有更简单的方法?如果表单中的任何内容发生变化,是否会像事件一样?如果用户更改了数据,然

注意:我已经在这个论坛上看到了一些解决方案,但它们不适用于我的具体情况

在我的应用程序中,用户总是使用模式窗口编辑数据。当模式第一次打开时,只有一个“关闭”按钮可见。如果用户更改任何文本,此按钮将立即隐藏,“取消”和“保存”按钮将可见。据我所知,实现此方法的唯一方法是将事件连接到所有文本控件。文本控件的数量因表单而异,但不超过50个。我需要“id”并将“change”事件放入表单中的每个控件中。我的问题是,有没有更简单的方法?如果表单中的任何内容发生变化,是否会像事件一样?如果用户更改了数据,然后又将其更改回来,并且无论如何都会触发事件,则这是正常的

@使用(Html.BeginForm(“,”,FormMethod.Post,新的{@id=“formpostenitdetails”,@style=“padding right:5px”}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true,“,new{@class=“text danger”})
@Html.HiddenFor(model=>model.IdNo)
@LabelFor(m=>m.UnitNo)
@Html.TextBoxFor(m=>m.UnitNo,新的{@id=“txtUnitNo”)
//…49更多文本控件
$(document).on(“change”、“#txtUnitNo”,函数(){EnableButtons();})
//49更多文本控件
功能启用按钮(){
$(“#btnCancel”).show();
$(“#btnSave”).show();
$(“#btnClose”).hide();
}

您可以将事件处理程序连接到所有输入,而不是将事件处理程序连接到每个输入

$('form input[type="text"]').on('change', function() {
    EnableButtons();
});
这就像选择器
表单输入[type=“text”]
选择表单中的所有输入元素(文本类型),然后将
change
事件处理程序绑定到它们

另一个选项是分配要监视类的所有输入,例如
change monitored
,然后可以将选择器更改为
$('.change monitored')。在(…)


演示
$('.changable')。关于('change',函数(e){
$('#log').append(e.target.id+'更改为'+$(e.target.val()+'
'); });

在所有输入中添加一个类,例如“txt输入”
@Html.TextBoxFor(m=>m.UnitNo,new{@id=“txtUnitNo”,@class=“txt input”})
并使用类检测更改

$(document).on('change', 'input.txt-input', function() {
  EnableButtons();
});
试试这个:

所有元素更改中的火灾事件(输入、选择、文本区域等)

$('form')。更改(函数(){
console.log(this);
警报(“变更”);
});

文本
文本

向所有元素添加一个类,例如,
检查脏的
,那么您只需要一个选择器。您可能还想挂接到
键下
粘贴
事件以获得更好的覆盖率。用户体验的首选方法是让按钮可见但被禁用。@Rory McCrossan:这看起来是一个完美的解决方案上,但我的JQuery技能还没有达到这个水平+1类的想法是最好的,尽管我会使用
js monitor change
(经典动词名词),同意,改为使用类。我同意将它们解耦是好的,但是在OP的情况下可能是这样overkill@Joey虽然你的答案是最好的,但出于某种原因,在我的案例中,两种解决方案都不起作用。我必须同意下面的答案,但我会投票赞成。