【问题标题】:<input type="text" /> with line wrap<input type="text" /> 带换行
【发布时间】:2011-08-26 20:36:18
【问题描述】:

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

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

你知道有什么改进吗?

【问题讨论】:

  • 您无权访问后端代码吗?我会在后端用 textareas 替换输入元素。
  • 是的,我愿意,但对我来说,更换客户端似乎更好。因为如果有人禁用了 javascript,他就会知道他不应该输入换行符。

标签: jquery input textarea word-wrap


【解决方案1】:

如果按键是“输入”,我很想使用&lt;textarea&gt; 并添加带有 jQ​​uery 的 js 以返回 false。我认为它的重量要轻一些。例如

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

诚然,这不是万无一失的,但您可以添加代码以在 textarea 的值更改时清除其内容。

【讨论】:

  • 多么精彩的回答,非常感谢!这对我来说似乎更优雅。遗憾的是,它仍然没有解决我创建 textarea 属性的方式。你也有这方面的建议吗? (:
  • 我很难理解你在用 attrs 和 defaults 做什么。你能给我解释一下吗?
  • 当然可以!我希望 textarea 具有输入的所有属性。因此,现在我正在遍历属性名称列表,如果存在这样的属性,则将其“复制”到我的新 textarea 元素中。这对我来说似乎不是很直接。如果我能一次捕获所有属性会更好。
  • 好吧,我是这么想的,但是如果你使用我的方法,那么你将创建
  • 如果我的回答正确,您是在要求我直接使用
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2017-07-08
  • 1970-01-01
相关资源
最近更新 更多