Javascript 如何使用jQuery在输入中用逗号替换换行符? 我有意见 问题

Javascript 如何使用jQuery在输入中用逗号替换换行符? 我有意见 问题,javascript,jquery,regex,clipboard,jquery-events,Javascript,Jquery,Regex,Clipboard,Jquery Events,电子表格中的某些单元格可能有空格,因此/\s+/g太宽。但是,/[\r\n\t]+/g不起作用。事实上,我认为jQuery甚至在删除换行符之前都无法访问输入值 一起唱吧 我已经提供了一个预期的输入和输出 <!-- sample input, copy below this line -- one 2 hello world foo bar m3000 -- end copy --> <!-- output should look like one, 2, hello worl

电子表格中的某些单元格可能有空格,因此
/\s+/g
太宽。但是,
/[\r\n\t]+/g
不起作用。事实上,我认为jQuery甚至在删除换行符之前都无法访问输入值

一起唱吧 我已经提供了一个预期的输入和输出

<!-- sample input, copy below this line --
one
2
hello world
foo bar
m3000
-- end copy -->

<!-- output should look like
one, 2, hello world, foo bar, m3000
-->

恐怕这是不可能的(如果不进行黑客攻击)

  • 当粘贴的数据设置为输入值时,将删除换行符,因此无法通过读取输入值检索原始版本
  • 您无法在
    onpaste
    事件中获取粘贴的数据本身(即具有专有的,但是)
我建议您使用
textarea
,这样您就可以维护这些新行,并根据需要执行任何操作。您可以设置
文本区域的样式,使其看起来像输入,禁用调整大小并使其只有一行


在输入上有一个透明的文本区怎么样?大小要与之匹配。一旦粘贴,分解新行应该会容易得多。在聚焦时,将文本提升到textarea级别以操纵换行符等,在模糊时,将其发送回输入。如果不需要维护输入,则将其替换为样式类似于文本框的textarea。

您可以将事件重定向到textarea,然后获取包含以下字符的粘贴值:

$(function(){
    $('input').on('paste', function(e){
        var target = $(e.target);
        var textArea = $("<textarea></textarea>");
        textArea.bind("blur", function(e) {
            target.val(textArea.val().replace(/\r?\n/g, ', ') );
            textArea.remove();
        });
        $("body").append(textArea);
        textArea.focus();
        setTimeout(function(){
            target.focus();
        }, 10);
    });
});
$(函数(){
$('input')。在('paste',函数(e)上{
var目标=$(e.target);
var textArea=$(“”);
textArea.bind(“模糊”,函数(e){
target.val(textArea.val().replace(/\r?\n/g,,');
textArea.remove();
});
$(“正文”)。追加(文本区域);
textArea.focus();
setTimeout(函数(){
target.focus();
}, 10);
});
});

您可以在这里尝试:

textarea
赢取。谢谢大家!+1它起作用了,基本上是我链接的问题中描述的黑客。但是使用
文本区域不是更干净吗?是的但是,如果字段必须是单行文本,我认为使用输入文本而不是文本区域也更干净,不是吗?嗯,我最喜欢这种方法,但它似乎不适用于IE9。七、八年没考过。有什么想法吗?
<!-- sample input, copy below this line --
one
2
hello world
foo bar
m3000
-- end copy -->

<!-- output should look like
one, 2, hello world, foo bar, m3000
-->
$(function(){
    $('input').on('paste', function(e){
        var target = $(e.target);
        var textArea = $("<textarea></textarea>");
        textArea.bind("blur", function(e) {
            target.val(textArea.val().replace(/\r?\n/g, ', ') );
            textArea.remove();
        });
        $("body").append(textArea);
        textArea.focus();
        setTimeout(function(){
            target.focus();
        }, 10);
    });
});