jQuery基于条件触发事件?

时间:2012-09-06 08:13:10

标签: jquery ajax events ajaxcontroltoolkit

我有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. 在数据被填充lbCustomerNamelblAddress(通过填充数据)之前,焦点输出事件触发,因此它始终为空,即使存在是数据。 (我通过显示警告检查了焦点事件,并且在标签文本更新之前显示了警告。)

  2. 用户还可以在文本框中输入,而不只是从AutoCompleteExtender列表中选择一项,对吗?因此,在这种情况下,PopulalteData将不会被调用,但焦点将被调用。

  3. 我想要做的是,当用户输入进入框中时,只调用focusout事件 <({1}}不被解雇),因为如果他没有从列表中选择,那么它就是一个新顾客。 有没有办法做到这一点?或者如果不是这样,那么还有其他方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:0)

几个想法:

1)你真的可以假设如果用户没有从列表中选择他们不在其中吗?例如,如果用户的名字是Tom,他们只需在不使用autosuggest的情况下快速输入。

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