Автозаполнение "не является функцией"

Мы протестировали функцию автозаполнения Jquery UI (jquery-ui-1.8.10.custom.min.js) на простой HTML-странице, которая работала.

Затем мы копируем один и тот же код в пользовательский элемент управления Asp.net и перестаем работать. Ошибка Javascript гласит: "$ searchBox.autocomplete не является функцией".

Этот пользовательский элемент управления используется в проекте Asp.net Sitefinity 3.7. На странице есть ScriptManager. Не уверен, что еще я могу добавить...

Кто-нибудь знает, что происходит?

Ammend:

<script src="/js/jquery-1.5.min.js" type="text/javascript"></script>
<script src="/js/jquery-ui-1.8.10.custom.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        var termTemplate = "<span class='ui-autocomplete-term'>%s</span>";

        $('input#searchInput').autocomplete({
            source: ['johannesburg z', 'johannesburg x', 'johannesburg v', 'johannesburg b', 'johannesburg a', 'johannesburg q', 'johannesburg u', 'johannesburg y', 'johannesburg o', 'johannesburg p'],
            minLength: 3,
            open: function (e, ui) {

                var 
                acData = $(this).data('autocomplete'),
                styledTerm = termTemplate.replace('%s', acData.term);

                acData
                .menu
                .element
                .find('a')
                .each(function () {
                    var me = $(this);
                    me.html(me.text().replace(acData.term, styledTerm));
                });

            }
        });
    });
</script>
<div class="outerSearchBox">
    <div class="searchFieldWrapper">
        <input id="searchInput" type="text" class="searchField" /><a class="searchButton">SEARCH
        </a>
        <div class="searchSugContainer">

Спасибо.

Ответы

Ответ 1

Эта ошибка обычно означает, что jquery или плагин еще не загружены. Убедитесь, что вызов функции не попадает до загрузки документа:

$(function(){
    var $searchBox = $('#mysearchBox');
    $searchBox.autocomplete(...);
});

Также проверьте правильность пути к файлам javascript. Firebug или инструменты разработчика google chrome полезны для проверки обеих этих проблем.

Ответ 2

Это может быть:

  • Порядок загрузки jquery.js.
  • Дубликат jquery.js включает в себя на той же странице.

Ответ 3

Возможно, попробуйте использовать метод jQuery.noConflict() для теста. Это в основном просто заставляет вас использовать другой псевдоним для jQuery. Это сработало для меня в SF4.3.

var j = jQuery.noConflict();
// Do something with jQuery
j("div p").hide();
// Do something with another library $()
$("content").style.display = 'none';

Ответ 4

У меня была эта проблема, и произошло то, что мой файл jQuery загружался дважды. В значительной степени это было в моей голове:

<script src="assets/js/jquery.min.js"></script>
<script src="js_css/jquery-ui.min.js" ></script>

А потом у меня был вызов AJAX, который загружает больше частей моего документа, и был другой:

<script src="assets/js/jquery.min.js"></script>

script в моих результатах AJAX, и я получил $.hmtl() мои результаты в моем документе. Делая это, мы в значительной степени переопределяем все var, которые jquery-ui.min.js изменили или использовали.

Ответ 5

Это вызвано конфликтом с использованием Sitefinity для использования jQuery.

Если вы перемещаете ссылки script для jQuery в нижней части страницы перед тегом закрывающей формы. Это решит проблему в Sitefinity 4.0, но я подозреваю, что она также устранит эту проблему в Sitefinity 3.7.