2013-07-25 58 views
1

我在網站上有一個搜索輸入框。 如果用戶輸入的,我喜歡全部更換[空格]輸入框中的文本與「&」 -characters(大寫:空間&空間)用&符號替換搜索輸入框中的所有空格

但我有我的代碼中的一個小錯誤,因爲如果用戶試圖刪除文本(退格鍵),然後將其插入一個「&」又是否能在替換最後一個字符空間...

見我的JSFiddler例如:http://jsfiddle.net/JFEb4/

任何想法?

代碼:

$("[name='search']").keyup(function() { 

    var input = $(this).val().replace(/ & /g, "x"); 

    if (input.indexOf(" ") >= 0) { 
     $(this).val(input.replace(' ', ' & ').replace(/x/g, " & " 

}); 

回答

3

一個更好的辦法是檢查字符添加到值之前按下了空格鍵,如果是,防止輸出的字符,並添加&代替。
這也將避免退格問題都在一起:

$("[name='search']").on('keydown', function(e) { 
    if (e.which === 32) { 
     e.preventDefault(); 
     this.value = this.value + ' & '; 
    } 
}); 

FIDDLE

+0

不是真的,因爲如果你嘗試輸入一些在前面的文本,然後它將被粘貼在最後,並且如果你從剪貼板插入一些東西,那麼它將無法工作......還有什麼想法? – Simon

+0

@Simon - 類似這樣的可能 - > http://jsfiddle.net/JFEb4/4/ – adeneo

+0

哇,非常感謝adeneo!只有一個小錯誤,如果用戶粘貼了一些已經包含'&'的文本(例如:Test1&Test2),那麼它將被替換爲'_ $ _',我無法找出原因......因爲我認爲它應該從過去的函數中的第二個替換替換還是不? – Simon

0

這是我的看法:

$("[name='search']") 
    .on('keyup paste', function(e) { 

     var replaceSpaces = function(el) { 
      return function() { 
       $(el).val($(el).val().replace(/(^|[^&])\s+($|[^&])/g, '$1 & $2')); 
      }; 
     } (this); 

     if (e.type === 'keyup' && e.which === 32) { 
      replaceSpaces(); 
     } else if (e.type === 'paste') { 
      setTimeout(replaceSpaces, 5);     
     } 

    }); 

(this code on jsFiddle)

相關問題