Jquery <;输入类型=";“文本”/&燃气轮机;换行

Jquery <;输入类型=";“文本”/&燃气轮机;换行,jquery,input,textarea,word-wrap,Jquery,Input,Textarea,Word Wrap,我希望显示文本输入,但如果文本太长,它们应该会中断。但是用户不能自己插入新行,原因是我总是想让它的整个值可见 我认为CSS没有最好的解决方案,所以我决定用textarea元素替换所有输入元素,并自动调整其高度。为了防止出现多条线路,我只需更换它们 我用这段代码做到了这一点,但特别是在我获取所有输入的属性以将它们传递到texarea的部分,我觉得很尴尬 $(document).ready(function(){ $('input[type="text"]').each(function()

我希望显示文本输入,但如果文本太长,它们应该会中断。但是用户不能自己插入新行,原因是我总是想让它的整个值可见

我认为CSS没有最好的解决方案,所以我决定用textarea元素替换所有输入元素,并自动调整其高度。为了防止出现多条线路,我只需更换它们

我用这段代码做到了这一点,但特别是在我获取所有输入的属性以将它们传递到texarea的部分,我觉得很尴尬

$(document).ready(function(){
    $('input[type="text"]').each(function(){
        var attrs = { rows: 1 }, defaults = ['name', 'id', 'title', 'value', 'class', 'style', 'disabled', 'readonly', 'accesskey'];
        for(var i in defaults){
            if($(this).is(':[' + defaults[i] + ']')){
                attrs[defaults[i]] = $(this).attr(defaults[i]);
            }
        }
        attrs["class"] = (attrs["class"] || "") + " text-input";
        $(this).replaceWith($('<textarea />', attrs).change(function(){
            $(this).val(function(i, v){
                return v.replace(/\n/g, " ");
            }).css("height", $(this).attr("scrollHeight"));
        }));
    });
});
$(文档).ready(函数(){
$('input[type=“text”]”)。每个(函数(){
var attrs={rows:1},默认值=['name','id','title','value','class','style','disabled','readonly','accesskey'];
对于(默认情况下的var i){
if($(this).is(':['+默认值[i]+']')){
attrs[defaults[i]=$(this).attr(defaults[i]);
}
}
属性[“类”]=(属性[“类”]| |“”)+“文本输入”;
$(this.replaceWith($('',attrs.change)(function()){
$(this).val(函数(i,v){
返回v.replace(/\n/g,“”);
}).css(“高度”,$(此).attr(“滚动高度”);
}));
});
});

你知道有什么改进吗?

如果按键是“回车”,我会尝试使用
并添加jsw/jQuery以返回false。我觉得它轻一点。例如

$('textarea').keypress(function(evt){
  if (evt.keyCode == 13) { return false; }
});

诚然,它不是傻瓜式的,但是当文本区域的值发生变化时,您可以添加代码来删除文本区域的内容。

您没有访问后端代码的权限吗?我会在后端用文本区域替换输入元素。是的,我会,但对我来说,在客户端替换它们似乎更好。因为如果有人禁用了javascript,他就会知道他不会输入换行符。这是一个多么精彩的回答,非常感谢!这对我来说似乎更优雅。遗憾的是,它仍然无法修复我创建textarea属性的方式。你也有这方面的建议吗?(:我很难理解您对属性和默认值所做的操作。您能向我解释一下吗?当然可以!我希望textarea具有输入的所有属性。因此,现在我正在遍历属性名称列表和“复制”如果存在这样一个属性,它将被添加到我的新textarea元素中。这对我来说似乎不是很直接。如果我可以一次捕获所有属性,那会更好。好吧,我有点这样认为,但是如果使用我的方法,那么你将创建s而不是s,因此你可以直接将属性添加到它们中,而不是从中剥离它们输入…或者你的意思是现在你正在物理上更改html代码以将上述交换放在适当的位置?如果是这样,js不是一个很好的方法;我建议使用html解析器创建一个节点树,更改树的元素,然后将树输出回html(这可以用大约4-5行代码完成)您是否熟悉其他解释型语言,如Python或Ruby?如果我回答正确,您会要求我直接使用s而不是替换s。输入是动态创建的,因此将其更改为textarea标记不会花费太多精力。当然,这是一种省去麻烦的方法,可以使用e旧的属性,但对我来说似乎有点不准确,因为如果有人禁用了javascript,那么他将有一个多行输入字段,这将是错误的:用户不需要使用多行,他只应该能够看到所有的内容,不管它有多长。:-)