我有这个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
问题是
focusout 事件在可以填充数据之前
lbCustomerName
触发,并且lblAddress
(通过该填充数据),因此即使有数据,它也将始终为空。(我通过显示警报检查了焦点事件,并且在更新标签文本之前显示了警报。)用户也可以在文本框中输入,而不仅仅是从
AutoCompleteExtender
列表中选择一个项目,对吧?因此,在这种情况下,PopulalteData
不会调用,但会调用 focusout。
我想做的是,仅在用户输入框中(即未触发)时调用该focusout
事件,因为如果他没有从列表中选择,它显然是一个新客户。那么有没有办法做到这一点?或者,如果不完全是这样,那么还有其他方法可以完成我正在尝试的事情吗?OnClientItemSelected