2011-04-23 110 views
2

我最近開始使用jQuery-ui-autocomplete。不過,我正面臨着一種奇怪而又狡猾的行爲。我正在嘗試爲多值遠程數據(來自我的數據服務的數據)使用自動完成功能。我的代碼在逗號後面提取最後一個術語不起作用。我的代碼:jQuery ui自動完成奇怪行爲

function split(val) { 
    return val.split(/,\s*/); 
} 

function extractLast(term) { 
    return split(term).pop(); 
} 

代碼自動完成是

$('#txtBox') 
    .bind("keydown", function (event) { 
     if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) { 
      event.preventDefault(); 
     } 
    })  
    .autocomplete({ 
     minLength: 3, 
     selectFirst: true, 
     source: function (request, response) { 
      $.ajax('My/Data/Source.json', { 
       global: false, 
       success: function (data) { 
        response($.map(data.d.results, function (item) { 
         return { 
          label: item.Name, 
          id: item.id 
         } 
        })); 
       } 
      }); 
     }, 
     search: function() { 
      // custom minLength 
      var term = extractLast(this.value); 
      if (term.length < 3) { 
       return false; 
      } 
     }, 
     focus: function() { 
      // prevent value inserted on focus 
      return false; 
     }, 
     select: function (event, ui) { 
      var terms = split(this.value); 
      // remove the current input 
      terms.pop(); 
      // add the selected item 
      terms.push(ui.item.value); 
      // add placeholder to get the comma-and-space at the end 
      //terms.push(""); 
      this.value = terms.join(", "); 
      return false; 
     } 
    }); 

當我把一個調試器的功能,「搜索」,該術語總是大於3。這意味着它沒有正確評估正則表達式。當我包括術語

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

它完美地工作。但我不能在我的頁面中包含這個。但是,在Firefox中,這個工作正確沒有文檔類型聲明也。我在IE8和IE9中都嘗試過這兩種方式,但都沒有成功。


UPDATE 經過深入挖掘,發現主要問題在於IE和其他瀏覽器如何試圖用正則表達式分割上一項。使用IE瀏覽器時,它第二次試圖分割術語後,(逗號)。例如 http://jsfiddle.net/mE6th/嘗試在chrome和IE中打開此鏈接並查看區別。

+0

那麼,什麼是你當前的doctype或不要」你現在有什麼權利嗎? – 2011-04-23 04:36:58

+0

截至目前沒有任何文檔類型。請參閱我的更新。問題似乎縮小了我認爲的正則表達式。 – Ashish 2011-04-23 04:38:53

+1

我碰到過這篇文章:http://blog.stevenlevithan.com/archives/cross-browser-split – user670800 2011-04-23 04:59:22

回答

1

如果你想在一個逗號分隔字符串中的最後一項你就不能使用這個.split(',').pop(),例如:

'java,c++,php'.split(',').pop(); 

給「PHP」

+0

最終,這是我所做的,它的工作。但我所看到的是,正則表達式在不同的瀏覽器中給出了不同的結果。所以簡單地刪除和正則表達式使用上述結果。 – Ashish 2011-04-23 08:56:24

+0

那麼,如果這是被接受的答案,那麼自動完成問題標題是完全誤導:( – tishma 2014-05-28 15:28:24

+0

是的,它看起來像我的答案是一個更可接受的解決方案,以解決問題的不同部分,即查找逗號分隔的最後一個詞字符串jQuery自動完成是觸發器的事實可能實際上是無關緊要的。如果您有更多的描述性標題,請隨意編輯問題的標題:) – andyb 2014-05-28 16:12:16