This is a migrated thread and some comments may be shown as answers.

Find Item after 3 Characters Entered

5 Answers 354 Views
ComboBox
This is a migrated thread and some comments may be shown as answers.
Rob
Top achievements
Rank 1
Rob asked on 10 Aug 2011, 04:06 PM
I have a RadComboBox that gets populated on page_load() and is set w/ AutoPostback = "false" & EnableLoadOnDemand="false".  When the user starts typing in the text area of the control, I don't want to find a match in the list until at least 3 characters have been entered.  How can I accomplish this on the client side?  Right now it finds a match for each character typed.

Thanks,
Rob

5 Answers, 1 is accepted

Sort by
0
Thad
Top achievements
Rank 2
answered on 10 Aug 2011, 11:56 PM
Hi Dudeman,

Check out this article in the documentation, which gives a solution to your problem.
http://www.telerik.com/help/aspnet-ajax/combobox-request-items-given-number-letters.html

Thad
0
Rob
Top achievements
Rank 1
answered on 11 Aug 2011, 02:40 PM
Thanks for your suggestion, Thad, but the provided link is not my situation at all.  Like I previously stated, this combobox is prepopuatedon pageload and will not be repopulated on demand.  The OnClientItemsRequesting event does not get fired off in my situation.  I am looking for a JS event to evaluate the first 3 characters typed.  I notice in OnClientKeyPressing that s.get_text() equals the entire text of the matching item in the text area. 

Maybe I have to determine the difference of unhighlighted characters from the length of the item's text, because I notice that as I type the first 3 characters, they become unhighlighted one by one?
0
Thad
Top achievements
Rank 2
answered on 11 Aug 2011, 04:49 PM
Hi Dudeman,

Sorry about that.  Try this instead, which works for me.

function rcbFind_ClientKeyPressing(sender, eventArgs) {
    sender.set_markFirstMatch(sender.get_inputDomElement().selectionStart >= 2);
}

Here is the markup I tested it with, in case your settings are different.
<telerik:RadComboBox ID="rcbFind" runat="server" MarkFirstMatch="true" AllowCustomText="true"
    OnClientKeyPressing="rcbFind_ClientKeyPressing">
    <Items>
        <telerik:RadComboBoxItem runat="server" Text="January" Value="1" />
        <telerik:RadComboBoxItem runat="server" Text="February" Value="2" />
        <telerik:RadComboBoxItem runat="server" Text="March" Value="3" />
        <telerik:RadComboBoxItem runat="server" Text="April" Value="4" />
        <telerik:RadComboBoxItem runat="server" Text="May" Value="5" />
        <telerik:RadComboBoxItem runat="server" Text="June" Value="6" />
        <telerik:RadComboBoxItem runat="server" Text="July" Value="7" />
        <telerik:RadComboBoxItem runat="server" Text="August" Value="8" />
        <telerik:RadComboBoxItem runat="server" Text="September" Value="9" />
        <telerik:RadComboBoxItem runat="server" Text="October" Value="10" />
        <telerik:RadComboBoxItem runat="server" Text="November" Value="11" />
        <telerik:RadComboBoxItem runat="server" Text="December" Value="12" />
    </Items>
</telerik:RadComboBox>

Hope that helps better than my first response!
Thad
0
Thad
Top achievements
Rank 2
answered on 11 Aug 2011, 05:07 PM
Whoops - that JavaScript works in Firefox/Chrome only.  Here is the cross browser version.  I tested in IE8, Firefox 3.6, and Chrome 12.

function rcbFind_ClientKeyPressing(sender, eventArgs) {
    if (document.selection != undefined) { // IE
        var len = sender.get_text().length - document.selection.createRange().text.length;
        sender.set_markFirstMatch(len >= 2);
    }
    else if (sender.get_inputDomElement().selectionStart != undefined) { // Firefox, Chrome
        sender.set_markFirstMatch(sender.get_inputDomElement().selectionStart >= 2);
    }
}

Thad
0
Rob
Top achievements
Rank 1
answered on 11 Aug 2011, 07:11 PM
The IE code is what I was looking for and it works like a charm.  Thank you so much, Thad!
Tags
ComboBox
Asked by
Rob
Top achievements
Rank 1
Answers by
Thad
Top achievements
Rank 2
Rob
Top achievements
Rank 1
Share this question
or