1

我有一个由服务器生成的 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!

4

0 回答 0