3

目的是检测页面加载后输入值是否更改。

输入字段(19 个字段)例如

<input type="text" name="date_day1" id="date_day1" value=" >
<input type="text" name="date_month1" id="date_month1" value=" >
<input type="text" name="date_year1" id="date_year1" value=" >
<input type="text" name="amount1" id="amount1" value=" >

然后像这样隐藏输入字段

<input type="text" name="is_row_changed1" id="is_row_changed1" value="">
<script>

$("#date_day1").on("change", function () {
    document.getElementById('is_row_changed1').value = 1;
});

$("#date_month1").on("change", function () {
    document.getElementById('is_row_changed1').value = 1;
});

</script>

如果在任何输入字段(19 个字段)中的值发生更改,那么我需要在此隐藏输入字段中反映它(我决定将隐藏输入字段值设置为 1)。

在使用 php 进行 ajax 之后,我检查隐藏的输入字段值是否为 1。如果为 1,则更新 mysql。目的是减少服务器资源的使用。

隐藏输入字段的问题 Javascript 代码会很长。可能是某种方式(代码)更短(更简单)?

4

4 回答 4

5

为每个输入添加一个 row_changed 类,然后您可以通过一次调用将它们全部定位:

$(".row_changed").on("change", function () {
document.getElementById('is_row_changed1').value = 1;
});

(您还可以使用 QuickSilver 的评论进一步简化它。)

于 2013-04-17T07:21:57.487 回答
1

您可以使用 JQuery 选择器为 HTML 代码中声明的所有输入元素设置相同的“输入更改”回调:

var anyFieldChanged = false; //Global variable
function changedCallBack()
{
  anyFieldChanged = true;
  alert('Fields changed');
}

allInputs = $('input');
allInputs.each(function() { this.onchange = yourCallBack(); });
于 2013-04-17T07:29:00.160 回答
1

我不知道它是否只是在您的示例代码中,但是您有多个具有相同 ID 的元素,这是无效的。每个 ID 都应该是唯一的(这是任何 ID 的目的)。您可以向每个要跟踪的输入添加一个类,然后像 Shawn 所说的那样选择它,或者如果您想跟踪除页面上隐藏的输入之外的每个输入,您可以使用

$("input:[type!=hidden]").on("change", function () {
    document.getElementById('is_row_changed1').value = 1;
});
于 2013-04-17T07:29:29.270 回答
0

像这样使用。

<script>
$("#date_day1").on("change", function () {

  $('#is_row_changed1').val(1);

});

$("#date_month1").on("change", function () {

  $('#is_row_changed1').val(1);

});

// etc
</script>
于 2013-04-17T07:40:09.010 回答