如何禁用ajax导致的下拉列表值更改?

时间:2014-10-20 18:36:21

标签: javascript ajax

我试图提出一个解决方案,当用户点击某个表单上的某些字段时,该解决方案不会让用户意外拨打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来电。如果还有其他解决方案,请告诉我。

1 个答案:

答案 0 :(得分:0)

我只记得StateSelected()调用的最后一个参数,所以如果再次使用相同的args调用,则不要执行ajax并保留以前的值。