我有TextBox txtCustomerName
,它与Ajax AutoCompleteExtender
相关联,我正在做的是OnClientItemSelected
AutoCompleteExtender
调用函数LoadCutomerDetails
与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
事件的事件处理程序,并检查lbCustomerName
和lblAddress
是否有任何值,如果没有,那么这是一个新客户,所以打开一个弹出对话框,可以添加详细信息,等等..
问题是
在数据被填充lbCustomerName
和lblAddress
(通过填充数据)之前,焦点输出事件触发,因此它始终为空,即使存在是数据。 (我通过显示警告检查了焦点事件,并且在标签文本更新之前显示了警告。)
用户还可以在文本框中输入,而不只是从AutoCompleteExtender
列表中选择一项,对吗?因此,在这种情况下,PopulalteData
将不会被调用,但焦点将被调用。
我想要做的是,当用户输入进入框中时,只调用focusout
事件 <({1}}不被解雇),因为如果他没有从列表中选择,那么它就是一个新顾客。
有没有办法做到这一点?或者如果不是这样,那么还有其他方法可以实现我的目标吗?
答案 0 :(得分:0)
几个想法:
1)你真的可以假设如果用户没有从列表中选择他们不在其中吗?例如,如果用户的名字是Tom,他们只需在不使用autosuggest的情况下快速输入。
2)您可以通过focusout事件调用PopulateDate,而不是使用OnClientItemSelected,如果名称/地址不在ajax成功回调中的resultAry
中,则弹出对话框?