0

複数の値にjQueryUIの例のコードを使用しています。改行を入れようとすると改行できますが、新しい項目を追加しようとすると改行が削除されます。改行を保持するにはどうすればよいですか?

参照。 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;
}
4

1 に答える 1

0

このコードで欲しいものを得ることができましたが、改善の余地があるかもしれません...

    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;
         }
     });
于 2013-03-23T15:36:51.417 に答える