2012-09-06 37 views
1

我有这个TextBox txtCustomerName,它与一个Ajax AutoCompleteExtender相关联,我正在做的是在AutoCompleteExtenderOnClientItemSelected调用函数LoadCutomerDetailsjQuery。像这样的东西..jQuery根据条件触发事件?

<asp:TextBox ID="txtCustomerName" runat="server" ClientIDMode="Static"></asp:TextBox> 
<ajax:AutoCompleteExtender runat="server" ID="autoComplete1" TargetControlID="txtCustomerName" 
ServicePath="~/AutoComplete.asmx" ServiceMethod="GetCompletionList" MinimumPrefixLength="1" CompletionInterval="10" CompletionSetCount="15" OnClientItemSelected="PopulateData"> 

和填充数据被定义为

function PopulateData() { 
     var data2 = $('#txtCustomerName').val().split('-')[0]; 
     var newData = data2.substring(0, data2.length - 1); 

     $.ajax({ 
      url: '/AutoComplete.asmx/GetPriorityAndRemarks', 
      type: 'POST', 
      timeout: 5000, 
      datatype: 'xml', 
      cache: false, 
      data: 'arg=' + newData, 
      success: function (response) { 
       var doc = response; 
       var result = $(doc).find("string").text(); 
       // the values is in form of name, address, mobile, priority and remark 
       var resultAry = result.split(':'); 
       $('#lbCustomerName').val(resultAry[0]); 
       $('#lblAddress').text(resultAry[1]); 
      } 
     }); 
    }; 

现在,我要做的是一个事件处理程序上focusout事件的关联jQuery,检查是否lbCustomerNamelblAddress有任何价值,如果不是那么这是一个新客户,所以打开一个弹出对话框,其中可以添加详细信息,等等。

问题是

  1. 该事件的内容事件触发数据可能充满lbCustomerNamelblAddress(由填充数据),所以它永远是零,即使有数据。 (我通过显示一个警告检查重点出事件,警报被前显示标签(一个或多个)进行了更新的文本。)

  2. 用户也可以在文本框中,而不是只选择一个来自AutoCompleteExtender的清单,对吗?那么,在这种情况下,PopulalteData将不会被调用,但重点将是。

我想要做的是,调用focusout事件前提条件当用户类型成箱(即OnClientItemSelected是不启动),因为如果他不是从列表中选择,它的一个新客户明显。 那么有没有办法做到这一点?或者,如果不是这样,那么还有其他方法可以完成我所尝试的?

回答

0

夫妇的想法:

1)你真的认为,如果用户不是从列表中选择他们不是吗?例如,如果用户的名字是Tom,并且他们只是在不使用自动提示的情况下快速输入。

2)而不是使用OnClientItemSelected可以通过focusout事件调用PopulateDate,然后弹出对话框,如果名称/地址不在里面的ajax成功回调?

+0

1.这可能是事实,没有想到这一点! 2.我可以在'PopulateData'中做所有事情,但是如果用户键入“M”从“自动完成”中选择“Mathew”并且标签结束,则在激发聚焦时,“TextBox”将具有“M”而不是“Mathew”在此之后,价值将变成“马修” – Razort4x