文本区域的高度与 Firefox 中的行不匹配

发布于 2024-12-08 22:29:42 字数 333 浏览 0 评论 0原文

文本区域的 rows 属性与 Firefox 中的行数不匹配。例如:

<textarea rows=4 cols=40>
1
2
3
4
this line is visible in FF
</textarea>

示例: http://jsfiddle.net/Z7zXs/6/

我该如何解决这个问题问题?对于 rows=4,文本区域应仅显示 4 行(而不是 5 行)。

The textarea's rows attribute does not match the number of lines in Firefox. For instance:

<textarea rows=4 cols=40>
1
2
3
4
this line is visible in FF
</textarea>

Example: http://jsfiddle.net/Z7zXs/6/

How can I fix this issue? The textarea should only display 4 lines (instead of 5) for rows=4.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

落叶缤纷 2024-12-15 22:29:43

有很多答案,但不适合我:

  • CSS 规则 (height: 5em;) 不够灵活,因为它完全覆盖 rows 属性
  • 而且我不想要使用 JavaScript

有一个“bug”: TEXTAREA 错误地应用了 ROWS= 和 COLS=

所以这是我的解决方案:

FF 向 TextArea 添加高度以预留滚动条的位置。

我不需要水平滚动条,因此它有助于解决问题:可以将以下 css 规则添加到文本区域:

overflow-x: hidden;

Here是示例。它甚至适用于 rows=1

There are lot of answers but wasn't suitable for me:

  • CSS rule (height: 5em;) is not flexible enoutgh because it completely overrides rows attribute
  • And I don'n want to use JavaScript

There is a "bug": TEXTAREA incorrectly applying ROWS= and COLS=

So here is my solution:

FF adds height to the TextArea to reserve place for scroll-bars.

I don't need horizontal scroll bar so it helps with fixing the issue: following css rule can be added to textarea:

overflow-x: hidden;

Here is example. It works even with rows=1.

通知家属抬走 2024-12-15 22:29:43

Firefox 总是在文本字段后添加一行。如果你希望它具有恒定的高度,请使用 CSS,例如:

textarea {
    height: 5em;
}

http://jsfiddle.net/Z7zXs/7/

编辑:
您还可以使用 @-moz-document url-prefix CSS 扩展仅针对 Firefox 浏览器。例子

@-moz-document url-prefix() {
    textarea {
        height: 5em;
    }
}

Firefox always adds an extra line after the textfield. If you want it to have a constant height, use CSS, e.g.:

textarea {
    height: 5em;
}

http://jsfiddle.net/Z7zXs/7/

EDIT:
You can also use the @-moz-document url-prefix CSS extension to target only the Firefox browser. Example

@-moz-document url-prefix() {
    textarea {
        height: 5em;
    }
}
时光倒影 2024-12-15 22:29:43

您可以使用 JavaScript 来固定高度(或硬编码 4x1.2 = 4.8em 的高度)。

示例 (JQuery),修复每个文本区域的问题:

$("textarea").each(function(){
    var lineHeight = parseFloat($(this).css("line-height"));
    var lines = $(this).attr("rows")*1 || $(this).prop("rows")*1;
    $(this).css("height", lines*lineHeight);
});

CSS 属性 line-height 的值等于每行(“row”)的高度。因此,当您定义了 row 后,此代码将修复高度。

rows 属性未设置时,代码将查看默认值 (.prop("rows"))。

You can fix the height by using JavaScript (or hard-code a height of 4x1.2 = 4.8em).

Example (JQuery), fix the issue for each textarea:

$("textarea").each(function(){
    var lineHeight = parseFloat($(this).css("line-height"));
    var lines = $(this).attr("rows")*1 || $(this).prop("rows")*1;
    $(this).css("height", lines*lineHeight);
});

The value of the line-height CSS property equals the height of each line ("row"). So, when you've defined row, this code will fix the height.

When the rows attribute is not set, the code will have a look at the default value (.prop("rows")).

去了角落 2024-12-15 22:29:43

我曾经遇到过同样的问题,但我无法使用 CSS,所以 JavaScript 是唯一的方法:这是 Mootools 和 jQuery 的方法来做到这一点:

Mootools:

window.addEvent('domready', function() {
if (Browser.firefox) {
    $('textarea[rows]').each(function(el) {
        if (!el.retrieve('ffRowsFixed')) {
            var rows = el.get('rows').toInt();
            if (rows > 1) el.set('rows', (rows - 1));
            el.store('ffRowsFixed', true);
        }
    });
}
});

jQuery:

$(document).ready(function() {
if ($.browser.mozilla) {
     $('textarea[rows]').each(function(i, el) {
         if (!$(el).data('ffRowsFixed')) {
             var rows = parseInt($(el).attr('rows'));
             if (rows > 1) {
                 $(el).attr('rows', (rows - 1));
             }
             $(el).data('ffRowsFixed', true);
         }
     });
}
});

It will check if the browser is firefox, if is,它将检查行是否已被更正,如果没有,它们将被修复。

I've had the same problem once and i couldn't use CSS, so JavaScript is the only way: Here's the Mootools and jQuery ways to do this:

Mootools:

window.addEvent('domready', function() {
if (Browser.firefox) {
    $('textarea[rows]').each(function(el) {
        if (!el.retrieve('ffRowsFixed')) {
            var rows = el.get('rows').toInt();
            if (rows > 1) el.set('rows', (rows - 1));
            el.store('ffRowsFixed', true);
        }
    });
}
});

jQuery:

$(document).ready(function() {
if ($.browser.mozilla) {
     $('textarea[rows]').each(function(i, el) {
         if (!$(el).data('ffRowsFixed')) {
             var rows = parseInt($(el).attr('rows'));
             if (rows > 1) {
                 $(el).attr('rows', (rows - 1));
             }
             $(el).data('ffRowsFixed', true);
         }
     });
}
});

It will check if the browser is firefox, if it is, it will check if the rows have been corrected already, and if not they will get fixed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文