1

我有这个TextBox txtCustomerName,它与一个相关联,Ajax AutoCompleteExtender我正在做的是在OnClientItemSelected这个AutoCompleteExtender调用一个函数LoadCutomerDetailsjQuery像这样的东西。。

<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. focusout 事件在可以填充数据之前lbCustomerName触发,并且lblAddress(通过该填充数据),因此即使有数据,它也将始终为空。(我通过显示警报检查了焦点事件,并且在更新标签文本之前显示了警报。)

  2. 用户也可以在文本框中输入,而不仅仅是从AutoCompleteExtender列表中选择一个项目,对吧?因此,在这种情况下,PopulalteData不会调用,但会调用 focusout。

我想做的是,在用户输入框中(即未触发)时调用该focusout事件,因为如果他没有从列表中选择,它显然是一个新客户。那么有没有办法做到这一点?或者,如果不完全是这样,那么还有其他方法可以完成我正在尝试的事情吗?OnClientItemSelected

4

1 回答 1

0

夫妻心得:

1)你真的可以假设如果用户没有从列表中选择他们不在列表中吗?例如,如果用户的名字是 Tom,他们只是快速输入,而不使用自动建议。

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

于 2012-09-06T08:52:20.710 回答