2016-12-01 36 views
0

我試圖在用戶書寫修剪使用JavaScript字符串(jQuery中):如何在書寫時刪除/修剪空格或製表符?

$(document).on('keydown', "input[type='text'], textarea", function(e) { 
      $(this).val($(this).val().trim()); 
      console.log('fixing'); 
     //if ($(this).val() == "") { 
      //alert('gwo!'); 
     //} 
    }); 

但是,當用戶書寫的空間來寫一個字這裏的問題是,這種代碼修剪數據在輸入下一個單詞串接,如:

I'mbigandgreat

真的是我需要的是刪除製表符或空格時使用CTRL + V從剪貼板中的用戶文本。

你能幫忙嗎?

+1

使用['paste'](https://developer.mozilla.org/en-US/docs/Web/事件/粘貼)事件而不是'keydown'。 –

回答

1

我認爲這是你需要的。尋找重複的空間字符。保留最後一個並刪除其他人。 String.replace與RegExp可以處理這個。

此外,我使用keyup事件,而不是KEYDOWN

$(document).on('keyup', "input[type='text'], textarea", function(e) { 
 
    let val = $(this).val(); 
 
    val = val.replace(/(?:^\s+|\s+?(\s))(\S+)/g, "$1$2"); 
 
    val = val.replace(/\s+(\s)$/, "$1"); 
 
    $(this).val(val); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea cols="40" rows="10"></textarea>

+0

這很好,但它不包括\ t的情況,可能是:'val.replace(/ \ s +?(\ s)(\ t)(\ S +)/ g,「$ 1 $ 2」);'? ??這是正確的? –

+0

@Cristian \ S包括了所有的空格字符(\ n「,」 \ t ...等) –

+0

與嘗試: '\t \ t \ t \ t \t \t asasdas asdasaas \t \ t \ t \ t \t \t'它會讓標籤仍然存在。隨着「這僅僅是我想在這裏\ t \t什麼」一個空間首先是存在的。 –

1

而不是僅僅捕獲任何keydown事件,您應該只在用戶按Ctrl + V或粘貼輸入時運行您的修剪代碼。

這對IE來說很難實現,但對於其他瀏覽器,您可以使用paste事件。

或者(雖然這很臭),請檢查e.which ==='ascii code for V'和e.ctrlKey === true

0

是否有必要在客戶端上修剪它?如果它很重要,那麼無論如何你都需要在服務器上完成它,所以你可能只能把它留在那裏。

相關問題