我有一个简单的控制形式,在那里我允许用户编辑字段。
如果用户已经编辑了一个字段,我们不会更新数据库中的值并将其标记为已编辑。
如果用户 * 没有编辑字段 *,我们从数据库中检索最新的值并更新相应的控件。
目前这不起作用。大约有一半的时间,即使在用户修改了控件之后,控件仍然被“替换”。
下面是我的代码:
@foreach (var row in Model.controls)
{
<input type="text" name="@row.Name" id="@row.NameID" value="@row.Value" edited="0" class="form-control data-field" onfocus="return ControlEdited(this.id)" style="width: 300px" />
}
字符串
首先,我们生成控件。这些都是动态的,并形成了一个foreach从我的viewmodel。
编辑控件时,使用onFocus调用以下函数:
function ControlEdited(id) {
document.getElementById(id).setAttribute('edited', 1);
document.getElementById(id).style.backgroundColor = "yellow";
}
型
现在到了棘手的部分--下面我调用的这个函数只应该替换和重写那些没有被编辑过的字段。然而,它只在某些时候起作用。它通常会替换已编辑的字段。
function UpdateControls() {
$(".data-field").each(function () {
var nameAttr = $(this).attr('name');
var id = $(this).attr('id');
var edited = $(this).attr('edited');
var stationID = document.getElementById('stationDD').value;
if (edited == 0) { //control has not been edited, so we will access database and replace value if needed.
var url = "/Manager/UpdateControlsFromDB/";
$.ajax({
url: url,
data: { name: nameAttr, station: stationID },
cache: false,
type: "POST",
success: function (data) {
if (data != null) {
document.getElementById(id).value = data;
}
else {
}
},
error: function (response) {
alert("Issue updating the page controls from database. Information: " + response.responseText);
}
});
}
else {
//do nothing, user edited field so we do not update from database
}
});
}
型
我很困惑。这个编辑过的变量和相应的代码怎么会不起作用呢?在每个编辑器上调用onFocus事件,这应该立即将“edited”值呈现为1,并防止UpdateControls()方法触及它们。
任何帮助是非常感谢!
1条答案
按热度按时间vql8enpb1#
调试和console.log updateControls函数中的每个变量,并查看是否出现错误
我已经尝试了你的方法,似乎在我这边工作得很好
个字符