我有一个由服务器生成的 HTML 输入元素,它看起来像这样:
这是服务器端
"<input id='" + cRoadList.getRoadListNumber() + ",start_km' style='' type=\"text\" value='"+ cRoadList.getStartKm() + "' onkeypress='handleRoadListDataUpdate(\""+cRoadList.getStartKm()+"\")'
如您所见,输入元素的属性是动态生成的,但事实并非如此,所以让我们通过放置一些静态数据来简化它,如下所示:
"<input id='myID' style='' type=\"text\" value='100' onkeypress='handleRoadListDataUpdate(\"100\")'
这个 HTML 输入元素最重要的部分是调用函数handleRoadListDataUpdate的onkeypress事件
这是客户部分
function handleRoadListDataUpdate(oValue) // The function accpets the old value of the *input* element
{
var event = handleRoadListDataUpdate.caller.arguments[0] || window.event ;
var keyPressed = event.keyCode;
if(keyPressed == 13)
{
var roadListNumber = event.target.id.split(",")[0];
var inputId = event.target.id.split(",")[1];
var nValue = event.target.value;
if(nValue != oValue)
{
var userAction = confirm("Are you sure you want to change this value?\nPrevious value: " + oValue + "\nNew value: " + nValue);
if(userAction == true)
{
var url = "/GBS/RoadListController";
var params = "type=updateRoadList&roadListNumber=" + roadListNumber + "&updateData="+inputId + "&newValue="+ nValue;
dhtmlxAjax.post(url,params,function(loader)
{
var xmlDoc = loader.xmlDoc.responseXML;
var sqlResponse = xmlDoc.documentElement.getElementsByTagName("response");
var result = sqlResponse[0].getAttribute("value");
if(result == "sql_error")
{
alert("The operation could not be completed because of an network error!");
event.target.value = oValue;
}
else if(result == "sql_success")
{
alert("The operation completed successfully!");
//Change the parameter oValue of the parent function
}
});
}
else
{
event.target.value = oValue;
}
}
}
}
基本上,此功能是关于使用用户在input元素中输入的新值更新(使用 ajax)数据库,然后按Enter 键。如果参数 oValue 与输入元素中的参数不同,则会发出 ajax 请求,以便可以使用新值更新数据库。
当操作完成时,我们在输入元素(由用户输入)中有新值,但问题是,如果他再次按 Enter,函数会再次执行,因为它的参数 oValue 不会随新值更改。
所以我的问题是:
如何更改 handleRoadListDataUpdate() 函数的参数oValue使其与nValue相同,以便如果用户不小心按 Enter 函数不会再次执行 ajax 部分?
附言
请不要使用 jQuery 代码!只有纯 JavaScript!