Telerik 使用 Javascript 的自动完成框 textchanged 事件

Posted

技术标签:

【中文标题】Telerik 使用 Javascript 的自动完成框 textchanged 事件【英文标题】:Telerik auto complete box text changed event using Java script 【发布时间】:2013-09-24 05:00:33 【问题描述】:

我的要求是我有2个控件代码和描述,当我选择代码描述将自动显示,我想选择多个代码自动在描述控件中显示多个描述,反之亦然

对于这种情况,我应该使用页面方法使用“自动完成框”,这是我第一次使用 Telerik 控件。

现在我可以在代码自动完成框中获取代码并能够选择多个代码。

现在我的问题是使用Java script/jQuery选择多个代码后如何选择描述?

我的代码如下所示

<telerik:RadAutoCompleteBox ID="RdAutoClassCode" runat="server" Width="150" DropDownHeight="150"
            DropDownWidth="150" TokensSettings-AllowTokenEditing="True" OnClientTextChanged="OnClientChange" on>
            <WebServiceSettings Method="GetISOCodesRadCombobox" Path="GetClassCodeAndDescription.aspx" />
        </telerik:RadAutoCompleteBox>

 function OnClientChange() 
        debugger;
        alert("Hi");
       

使用上述代码未触发文本更改事件。

请为此提供任何样本?

提前致谢, 斯里维迪亚

【问题讨论】:

为此你可能会使用 ajax 调用来进行描述? 是的..我想知道怎么打电话? 代码会更清楚,描述控件是什么?一个文本框? 在文档 .ready 上编写一个调用另一个 ajax 函数的函数。在文本框模糊时调用该函数......如果它不起作用,请尝试这个,让我知道将提供代码 描述框也是同一个rad自动完成框。当我使用代码自动完成框选择多个代码时,多个描述将自动显示在描述自动完成中,反之亦然.. 【参考方案1】:

我终于找到了解决办法。

<telerik:RadAutoCompleteBox ID="RdAutoClassCode" runat="server" Width="150" DropDownHeight="70"
            OnClientEntryRemoved="RemoveEntry" OnClientEntryAdded="addNewEntry"  DropDownWidth="150"
            TokensSettings-AllowTokenEditing="True">
            <WebServiceSettings Method="GetISOCodesRadCombobox" Path="GetClassCodeAndDescription.aspx" />
        </telerik:RadAutoCompleteBox>

<telerik:RadAutoCompleteBox ID="RdAutoClassDesc" runat="server" Width="150" DropDownHeight="70"
             DropDownWidth="150" TokensSettings-AllowTokenEditing="True">
            <WebServiceSettings Method="GetISOCodeDescriptionsRadCombobox" Path="GetClassCodeAndDescription.aspx" />
        </telerik:RadAutoCompleteBox>

网络方法:

[WebMethod]
    public static AutoCompleteBoxData GetISOCodesRadCombobox(object context)
    
        string searchString = ((Dictionary<string, object>)context)["Text"].ToString();
        DataTable data = GetData(searchString, 0);
        List<AutoCompleteBoxItemData> result = new List<AutoCompleteBoxItemData>();

        foreach (DataRow row in data.Rows)
        
            AutoCompleteBoxItemData childNode = new AutoCompleteBoxItemData();
            childNode.Text = row["CodeNumber"].ToString();
            childNode.Value = row["CodeNumber"].ToString();
            result.Add(childNode);
        

        AutoCompleteBoxData res = new AutoCompleteBoxData();
        res.Items = result.ToArray();

        return res;
    



[WebMethod]
    public static AutoCompleteBoxData GetISOCodeDescriptionsRadCombobox(object context)
    
        string searchString = ((Dictionary<string, object>)context)["Text"].ToString();
        DataTable data = GetData(searchString, 1);
        List<AutoCompleteBoxItemData> result = new List<AutoCompleteBoxItemData>();

        foreach (DataRow row in data.Rows)
        
            AutoCompleteBoxItemData childNode = new AutoCompleteBoxItemData();
            childNode.Text = row["CodeDesc"].ToString();
            childNode.Value = row["CodeDesc"].ToString();
            result.Add(childNode);
        
        AutoCompleteBoxData res = new AutoCompleteBoxData();
        res.Items = result.ToArray();
        return res;
    


    private static DataTable GetData(string text, int Value)
    
        SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["QMSDBCON"]);
        DataSet ds = SqlHelper.ExecuteDataset(con, "usp_GetIsoCode", text, Value);
        DataTable data = new DataTable();
        // adapter.Fill(data);
        data = ds.Tables[0];
        return data;
    

JavaScript 调用新条目:

function addNewEntry() 
        debugger;
        var autoCompleteBoxCode = $find("<%= RdAutoClassCode.ClientID %>");
        var autoCompleteBoxDescription = $find("<%= RdAutoClassDesc.ClientID %>");
        var entriesCount = autoCompleteBoxCode.get_entries().get_count();
        var entry = new Telerik.Web.UI.AutoCompleteBoxEntry();
        autoCompleteBoxDescription.get_entries().clear();

        for (var i = 0; i < entriesCount; i++) 
            var code = autoCompleteBoxCode.get_entries().getEntry(i).get_text();
            _ClassCodeSelectedIndexChanged(code);
        
    

使用 Json 调用服务器方法

function _ClassCodeSelectedIndexChanged(code) 
        debugger;
        var URL = window.location.protocol + "//" + window.location.host;
        URL = URL + "/GetClassCodeAndDescription.aspx/GetISOCodesRadComboboxData";
        $(document).ready(function () 
            $.ajax(
                type: "POST",
                url: URL,
                data: "Code : '" + code + "'",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) 
                    onsuccess(msg);
                ,
                error: function (xhr) 
                    onerror(xhr);
                
            );
        );
    

【讨论】:

【参考方案2】:
jQuery("#textbox").blur(function() 
  ajaxFunction(jQuery("#textbox").val());
);

function ajaxFunction(code)
// Your ajax call

试试这个希望完全有帮助。

【讨论】:

以上是关于Telerik 使用 Javascript 的自动完成框 textchanged 事件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 刷新 Telerik RadGrid 控件?

使用来自javascript的动态ID启用/禁用Telerik asp.net组合框

使用 Javascript/jQuery 更改 Telerik RadEditor 的值

Telerik RadComboBox javascript API问题

Telerik RadPageView 完成加载后调用 JavaScript 函数?

用于刷新页面和/或 Telerik 网格的 JavaScript 代码