我试图提出一个解决方案,当用户点击某个表单上的某些字段时,该解决方案不会让用户意外拨打ajax
。
例如,我有一个包含City,State和ZipCode下拉列表的表单。 当数据最初在屏幕上加载时,字段将填充数据。 然后,当更改城市或州或两者时,会有一个ajax调用,填充特定城市/州组合的ZipCode下拉列表。
但是,会发生什么情况是用户意外点击或标签状态下拉列表或城市文本框和标签,并调用重新填充ZipCodes下拉列表的ajax并将其默认为从数据库检索到的第一个。
如果无意更改ZipCode,当用户标记进出这些字段时,如何禁用ajax
调用。
这是当用户标签输入/输出时调用的函数。在城市onbeforedeactivate
和ZipCodes textbox
上的dropdownlist
事件上调用此函数:
function StateSelected(city, state, ddlZipName)
{
// city is a textbox
// state is a ddl
// var mySelect = state;
if ((state.selectedIndex > 0) && (city.value.length > 0))
{
//instantiate XmlHttpRequest
// Checking if IE-specific document.all collection exists
// to see if we are running in IE
if (document.all) {
xhttp = new ActiveXObject("Msxml2.XMLHTTP");
} else {
// Mozilla - based browser
xhttp = new XMLHttpRequest();
}
//hook the event handler
xhttp.onreadystatechange = HandlerOnReadyStateChange;
//prepare the call, http method=GET, false=asynchronous call
// alert(state.options[state.selectedIndex].value +
// " " + city.value + " " + ddlZipName);
xhttp.open("GET", "../sample.ashx?state=" + state.options[state.selectedIndex].value + "&city=" + city.value + "&ddlZipName=" + ddlZipName, false);
//finally send the call
xhttp.send();
}
}
代码中生成的onbeforedeactivate
事件:
txtCorporationLegalCity.Attributes.Add("onbeforedeactivate", "StateSelected(document.all['" + txtCorporationLegalCity.ClientID.ToString() + "'], document.all['" + ddlCorporationLegalState.ClientID.ToString() + "'], '" + ddlCorporationLegalZip.ClientID.ToString() + "')");
ddlCorporationLegalState.Attributes.Add("onbeforedeactivate", "StateSelected(document.all['" + txtCorporationLegalCity.ClientID.ToString() + "'], document.all['" + ddlCorporationLegalState.ClientID.ToString() + "'], '" + ddlCorporationLegalZip.ClientID.ToString() + "')");
我现在只能考虑禁用ajax
来电。如果还有其他解决方案,请告诉我。
答案 0 :(得分:0)
我只记得StateSelected()调用的最后一个参数,所以如果再次使用相同的args调用,则不要执行ajax并保留以前的值。