2011-07-01 38 views
2

我正在使用JQuery UI自動完成功能,我有一組項目通過ajax與搜索引擎強調的條款(因此標籤已經包含html)返回。問題是,每次我選擇一個項目時,帶有html標籤的值被插入到當然不好的文本框中。我不知道是否有反正我可以剝去標籤所有標籤插入文本框之前JQuery UI自動完成:在插入輸入字段之前如何從標籤剝離標籤?

 var cache = {}, lastXhr; 
     $('#location_name').autocomplete({ 
     source: function(request, response) {     

      var q = request.term; 
      if (q in cache) { 
       response(cache[ q ]); 
       return; 
      } 

      lastXhr = $.getJSON("location_search/", {q: q}, function(data, status, xhr) { 
       $.each(data, function(i, v){ 
        data[i].label = v.name + (v.address !== null ? ', ' + v.address : ''); 
       }); 

       cache[ q ] = data; 

       if (xhr === lastXhr) {           
        response(cache [q]); 
       } 
      }); 
     },  
     select: function(event, ui) { 
      $('#location_id').val(ui.item.id); 
      $('#selected_location').html(ui.item.label);       
     } 
    }).data("autocomplete")._renderItem = function(ul, item) { 
     return $("<li></li>") 
     .data("item.autocomplete", item) 
     .append("<a>"+ item.label + "</a>") // + + "<br>" + item.desc + "</a>" 
     .appendTo(ul); 
    }; 

回答

2

添加此功能:

function stripHTML(oldString) { 
    return oldString.replace(/<&#91;^>&#93;*>/g, ""); 
} 

並添加到您的代碼:

$('#location_name').change(function(){ 
    $(this).val(stripHTML($(this).val()); 
}); 
+0

謝謝德,在stripHTML功能會在得心應手,問題不在$('#selected_location'),但是,我應該從我的代碼中刪除它。問題出在於$('#location_name')的值,一旦選擇了下拉列表的值,它就會自動設置。 – mr1031011

+0

對不起,我已經更新了答案。希望新的功能可以修復它,否則我有另一個想法。讓我知道:) – Tak

+1

謝謝德,這個想法很好,我可以看到它應該工作,不幸的是它不。我認爲問題在於它在 之前踢了一段時間經過一些更多的試驗和錯誤之後,我發現瞭解決方案:(似乎無法弄清楚如何在評論中發佈漂亮的代碼)。再次感謝您的幫助 'function stripHTML(oldString){ \t return oldString.replace(/(<([^>] +)>)/ ig,「」); 。 } $( '#LOCATION_NAME')結合( 'autocompleteclose',函數(){\t \t \t $(本).VAL(stripHTML($(本).VAL())); \t}) ;' – mr1031011

0

爲了使這項工作,你也應該通過item.value

在選擇它看起來item.value第一,然後item.label

這樣,你可以留下你的選擇:像

select: function(event, ui) { 
     $('#selected_location').html(ui.item.label);       
    }