Высота textarea не соответствует строкам в Firefox.

Атрибут textarea rows не соответствует количеству строк в Firefox. Например:

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

Пример: http://jsfiddle.net/Z7zXs/6/

Как я могу исправить эту проблему? Текстовое поле должно отображать только 4 строки (вместо 5) для rows=4.

Ответ 1

Firefox всегда добавляет дополнительную строку после текстового поля. Если вы хотите иметь постоянную высоту, используйте CSS, например:

textarea {
    height: 5em;
}

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

EDIT: Вы также можете использовать расширение @-moz-document url-prefix для таргетинга только на браузер Firefox. Пример

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

Ответ 2

Есть много ответов, но не подходит для меня:

  • Правило CSS (height: 5em;) не является гибким enoutgh, потому что оно полностью переопределяет атрибут rows
  • И я не хочу использовать JavaScript

Существует "ошибка": TEXTAREA неправильно применяя ROWS = и COLS =

Итак, вот мое решение:

FF добавляет высоту в TextArea для резервирования места для полос прокрутки.

Мне не нужна горизонтальная полоса прокрутки, поэтому она помогает в устранении проблемы: после правила CSS можно добавить в textarea:

overflow-x: hidden;

Вот пример. Он работает даже с rows=1.

Ответ 3

Вы можете исправить высоту с помощью 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);
});

Значение свойства line-height CSS равно высоте каждой строки ( "строка" ). Итак, когда вы определили row, этот код зафиксирует высоту.

Если атрибут rows не установлен, код будет выглядеть по умолчанию (.prop("rows")).

Ответ 4

У меня была одна и та же проблема один раз, и я не мог использовать 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);
         }
     });
}
});

Он будет проверять, является ли браузер firefox, если он есть, он проверяет, исправлены ли строки уже, и если они не будут исправлены.