2013-03-23 79 views
0

我正在使用多个值的jQuery UI示例中的代码。当我尝试插入换行符时,它会让我,但是当我尝试添加新项目时,它将删除换行符。我怎样才能保留换行符?自动完成多个值,保留LineBreak

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”,但它增加了“jaJava”。如果我可以从$(this).val()中删除搜索词,我可能会有我想要的...任何人都知道如何做到这一点?

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

你说的意思是“把一个换行符吗?” – 2013-03-23 15:21:14

+0

我有一个我提供自动完成的textarea。我希望用户能够输入换行符(通过按“Enter”键)。他们可以做到这一点,但是当他们去添加一个新的自动完成项目时,它会删除换行符。我的编辑让我更接近,我想我几乎在那里...... – user1477388 2013-03-23 15:25:07

回答

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; 
     } 
    });