我正在尝试在用户写作时使用javascript(在jQuery中)修剪String:
$(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从剪贴板中删除文本时删除标签或空格。
你能帮忙吗?答案 0 :(得分:1)
当用户按下Ctrl + V或粘贴输入时,您应该只运行修剪代码,而不是仅捕获任何keydown事件。
这对于IE来说很难实现,但对于其他浏览器,您可以使用paste
事件。
或者(虽然这很臭),检查e.which
===' ascii代码为V'和e.ctrlKey === true
。
答案 1 :(得分:1)
我认为这就是你所需要的。寻找重复的空间字符。保留最后一个并删除其他人。带有RegExp的String.replace可以处理这个问题。
我也使用了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>
&#13;
答案 2 :(得分:0)
甚至有必要在客户端上修剪它吗?如果这很重要,那么无论如何你都需要在服务上进行,所以你可能只能把它留在那里。