5

I am using JQuery 1.8.3 and JQuery UI 1.8.24.

This is the code, that works just fine:



    $(function () {
        $("#").autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: '', type: "POST", dataType: "json",
                    data: { searchPattern: request.term },
                    cache: false,
                    success: function (data) {
                        response($.map(data, function (item) {
                            return { label: item.Label, value: item.Value, id: item.Id, description: item.Description }
                        }))
                    }
                });
            },
            delay: 300,
            minLength: 2,
            autoFocus: true
        })
        .data("autocomplete")._renderItem = function (ul, item) {
            return $("li>/li>")
            .data("ui-autocomplete-item", item)
            .append("a>" + item.label + "br>div style=\"font-size:x-small;font-style:italic;\">" + item.description + "/div>/a>")
            .appendTo(ul);
        };
    });

But if I add a second textbox to the HTML, copy the JavaScript above and change the selector and url (so in the end I have two autocomplete textboxes), then I get the following error for the second autocomplete:

TypeError: $(...).autocomplete(...).data(...) is undefined

With one autocomplete it works perfect, but with a second not I can't explain why. Does anyone can help me?

Thanks in advance!

Toby

EDIT:

I found the problem.

The JavaScript code is in an *.js file and the two textboxes are in two different *.thml files.

So there is only one textbox at a time and this is the problem.

Now I do the last part (with the data(...)) in the *.html file and it works fine:

$("#selector").autocomplete().data("autocomplete")._renderItem = renderItem;

Thank for your help!

5
  • You have invalid markup in return $("li>/li>"). Is that a typo? That could most certainly be causing issues too. Commented Oct 17, 2013 at 12:40
  • Yes I know. That's only because I didn't know how to post HTML-Tags at stackoverflow.com. So I decide to remove the first "<". Commented Oct 17, 2013 at 13:07
  • @Toby: You paste the code, select it, and then press Ctrl + K. Tada! Commented May 19, 2014 at 9:09
  • I've posted my solution here: stackoverflow.com/a/53885800/4187751 Commented Dec 21, 2018 at 13:49
  • I've posted my solution here : stackoverflow.com/a/53885800/4187751 Commented Dec 21, 2018 at 13:51

3 Answers 3

6

There was a change in the data key naming convention in UI 1.9

jQuery 1.9/1.10 removed the key autocomplete and added uiAutocomplete

.data("uiAutocomplete")

Please note: according to latest Documentation (v1.10.x) it should be .data("ui-autocomplete") (see: http://jqueryui.com/autocomplete/#custom-data)

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks, but I tested that already. I am also using JQuery 1.8.3 and JQuery UI 1.8.24.
@Toby your selector $("#") could the also a problem... looks like you missed id after #
Thanks! I found the problem, see above. Thanks for your help!
it's actually .data('ui-autocomplete') rather than .data('uiAutocomplete'). Please correct it.
1

The other day, I encountered the same issue, but it had nothing to do with the version I was using but simply that the element being aucomplete-ed did not exist! Try

alert($('...').length);

and make sure it is not zero.

Comments

0

You can implement the below mentioned line

.autocomplete( "instance" )._renderItem = function( ul, item ) {

instate of

.data("autocomplete")._renderItem = function (ul, item) {

as per the documentation available at Jquery site JQuery AutoComplete Funtionality you will find this code.

from upgraded version of jquery 1.10 they have made change in code. hope this will help you.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.