Автозаполнение jquery не работает с materialize.js

Я использую Materialize, JQuery для разных целей. Если у меня нет файла materialize.js, связанного с моей html-страницей, автозаполнение работает безупречно, но если я добавлю файл, автозаполнение перестанет работать. Отладка показывает, что пропускает всю функцию. Перевод функции в бесконфликтный режим тоже не помогает:

    var $j = jQuery.noConflict();
    $j('#'+rowid).autocomplete({});

Кто-нибудь знает, в чем проблема? Обновлено: весь код функции: "

    public AutocompleteArticles(item: OrderLine) {
    const outdatedarticle: OrderLine = item;
    let rowid = $("#txtsearch" + item.ModelId).attr('id');
    let articles: any = OrderPage.Instance().AvailableArticles;
    $('#'+rowid).autocomplete({
        source: function (request, response) {
            var searchtext = request.term.toLowerCase();
            response($.map(articles, function (item) {
                if (item.ArticleNumber.toLowerCase().includes(searchtext) || item.Name.toLowerCase().includes(searchtext) || item.Description.toLowerCase().includes(searchtext) ) {
                    return {
                        label: item.ArticleNumber + ' ' + item.Description,
                        value: {
                            ModelId: null,
                            ArticleModelId: item.ModelId,
                            OfferModelId: OrderPage.Instance().ModelId,
                            Name: item.Name,
                            Discount: item.Discount,
                            Amount: item.Amount,
                            Price: item.PriceExclVat,
                            ArticleNumber: item.ArticleNumber,
                            ArticleDescription: item.Description,
                            OrderLineDescription: item.OrderLineDescription,
                            VAT: item.TaxRate
                        }
                    }
                }
            }));

        },
        select: function (event, item) {
            let articlevalues: OrderLine = item.item.value;
            let newarticle: any = outdatedarticle;
            newarticle.ArticleModelId = articlevalues.ArticleModelId;
            newarticle.ArticleNumber = articlevalues.ArticleNumber;
            newarticle.ModelId = articlevalues.ModelId;
            newarticle.OfferModelId = articlevalues.OfferModelId;
            newarticle.Price = articlevalues.Price;
            newarticle.VAT = articlevalues.VAT;
            newarticle.Amount = outdatedarticle.Amount();
            newarticle.Discount = outdatedarticle.Discount();
            newarticle.ArticleDescription = articlevalues.ArticleDescription;

            let result: OrderLine = OrderPage.Instance().AddOrderLine(newarticle);
            OrderPage.Instance().Order.OrderLines.replace(outdatedarticle, result);
        }
    });


}

Статьи загружаются в «Доступные статьи» по готовому документу. HTML:

    <input id="autocomplete" class="input-field autocomplete" data-bind="value: '', attr: { id: 'txtsearch' + ModelId }, event :{ keyup: OrderPage.Instance().AutocompleteArticles }" placeholder="Zoek" />

Я также использую KnockoutJS. AutocompleteArticles запускается событиями нажатия клавиш.

Можете ли вы дать больше своего кода? Вам нужно предоставить данные, которые должны использоваться при автозаполнении. Где вы это определяете?

Patrick Schocke 26.10.2018 09:38

Добавлен дополнительный код, извините! Спасибо!

Karu 26.10.2018 10:00
0
2
204
1

Ответы 1

хм ... подозреваю, тебе нужно вызвать var $j = jQuery.noConflict()

До импортируешь materialize

т.е. что-то вроде

/* index.html */
<script src = "jquery.3.1.0.js"></script>
<script>
  var $j = jQuery.noConflict()
</script>
<script src = "materialize.1.0.0.js"></script>

/* other codes */

/* nb: $, NOT $j */
$('#'+id).autocomplete({
  /* autocomplete init obj */
})

К сожалению, это не работает. При наведении указателя мыши на функцию $ ('#' + id) .autocomplete ({}) видно, что она использует JQuery, а не Materialize. Так что я в тупике.

Karu 26.10.2018 11:41

хм .. как и я. Вы дважды импортировали jquery? один перед $j = jQuery.noConflict() и один раз после?

pandamakes 26.10.2018 11:48

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

Karu 26.10.2018 12:58

Они оба просматривают одни и те же файлы ... Но отладчик никогда не идет дальше к «источнику» или «выбору» автозаполнения.

Karu 26.10.2018 13:02

Другие вопросы по теме