带有换行符的<input type =“text”/>

时间:2011-08-26 20:36:19

标签: jquery input textarea word-wrap

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

我认为没有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"));
        }));
    });
});

你知道有什么改进吗?

1 个答案:

答案 0 :(得分:2)

我很想使用<textarea>并添加js w / jQuery,如果按键是'enter'则返回false。我觉得它的重量要轻一些。 E.g。

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

不可否认,这不是万无一失的,但是当它的值发生变化时,你可以添加代码来擦除textarea的内容。