2016-12-01 78 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

是否有必要在客户端上修剪它?如果它很重要,那么无论如何你都需要在服务器上完成它,所以你可能只能把它留在那里。