Автозаполнение нескольких значений, сохранение разрыва строки

Я использую код из примера пользовательского интерфейса jQuery для нескольких значений. Когда я пытаюсь вставить разрыв строки, это позволяет мне, но затем, когда я пытаюсь добавить новый элемент, он удаляет разрыв строки. Как сохранить разрывы строк?

Ref. http://jqueryui.com/autocomplete/#multiple

    function split(val) {
        return val.split(/\s\s*/);
    }
    function extractLast(term) {
        return split(term).pop();
    }
    function formatItem(item) {
        return item.substr(item.indexOf(" ") + 1);
    }

    $("#propertyInfo, #legalDesc, #taxes, #additionalTaxes, #mortgagesLiensCourt, #additionalMatters")
     .addClass('shiftTabClass')
     .bind("keydown", function (event) {
         if (event.keyCode === $.ui.keyCode.TAB &&
         $(this).data("ui-autocomplete").menu.active) {
             event.preventDefault();
         }
     })
     .autocomplete({
         source: function (request, response) {
             // delegate back to autocomplete, but extract the last term
             var term = extractLast(request.term);
             var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");
             //response($.grep(availableTags, function (item) {
             response($.grep(textCodes[this.element.attr('id')], function (item) {
                 return matcher.test(item);
             }));
         },
         focus: function () {
             // prevent value inserted on focus
             return false;
         },
         minLength: 1,
         select: function (event, ui) {
             var terms = split(this.value);
             // remove the current input
             terms.pop();
             // add the selected item
             terms.push(formatItem(ui.item.value));
             // add placeholder to get the comma-and-space at the end
             terms.push("");
             this.value = terms.join("  ");
             return false;
         }
     });

Изменить:

Это дает мне то, что я хочу, но при этом добавляется текст для поиска, т.е. если я набираю «ja» и нажимаю «Java», он не только добавляет «Java», но и добавляет «jaJava». Если я могу удалить поисковый запрос из $ (this) .val (), у меня может быть то, что я хочу ... Кто-нибудь знает, как это сделать?

select: function (event, ui) {
     $(this).val($(this).val() + ui.item.value);
     return false;
}

person user1477388    schedule 23.03.2013    source источник
comment
Что вы подразумеваете под переводом строки?   -  person Andrew Whitaker    schedule 23.03.2013
comment
У меня есть текстовое поле, для которого я использую автозаполнение. Я хочу, чтобы пользователи могли вводить разрывы строк (нажимая клавишу Enter). Они могут это сделать, но когда они перейдут, чтобы добавить новый элемент автозаполнения, он удалит разрывы строк. Мой монтаж приближает меня, я думаю, что я почти готов ...   -  person user1477388    schedule 23.03.2013


Ответы (1)


Я смог получить то, что хочу, с помощью этого кода, но, возможно, есть возможности для улучшения ...

    function removeLastInstance(badtext, str) {
        var charpos = str.lastIndexOf(badtext);
        if (charpos < 0) return str;
        ptone = str.substring(0, charpos);
        pttwo = str.substring(charpos + (badtext.length));
        return (ptone + pttwo);
    }

    var sTerm;

    $("#propertyInfo, #legalDesc, #taxes, #additionalTaxes, #mortgagesLiensCourt, #additionalMatters, #abstractorComments")
     .addClass('shiftTabClass')
     .bind("keydown", function (event) {
         if (event.keyCode === $.ui.keyCode.TAB &&
         $(this).data("ui-autocomplete").menu.active) {
             event.preventDefault();
         }
     })
     .autocomplete({
         source: function (request, response) {
             // delegate back to autocomplete, but extract the last term
             var term = extractLast(request.term);
             sTerm = term;
             var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");
             //response($.grep(availableTags, function (item) {
             response($.grep(textCodes[this.element.attr('id')], function (item) {
                 return matcher.test(item);
             }));
         },
         focus: function () {
             // prevent value inserted on focus
             return false;
         },
         minLength: 1,
         select: function (event, ui) {
             /*
             var terms = split(this.value);
             // remove the current input
             terms.pop();
             // add the selected item
             terms.push(formatItem(ui.item.value));
             // add placeholder to get the comma-and-space at the end
             terms.push("");
             this.value = terms.join("  ");
             return false;
             */
             console.log(sTerm);
             $(this).val(removeLastInstance(sTerm, $(this).val()) + ui.item.value);
             return false;
         }
     });
person user1477388    schedule 23.03.2013