2011-10-08 32 views
33

Thuộc tính rows của văn bản không khớp với số dòng trong Firefox. Ví dụ:Chiều cao của vùng văn bản không khớp với các hàng trong Firefox

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

Ví dụ: http://jsfiddle.net/Z7zXs/6/

Làm thế nào tôi có thể khắc phục vấn đề này? Textarea chỉ hiển thị 4 dòng (thay vì 5) cho rows=4.

+0

Tôi có hiểu rằng 'không hiển thị' có nghĩa là người dùng phải cuộn xuống? nếu chỉ thay đổi 'rows = 5'. Nếu không, vui lòng giải thích ý nghĩa của 'không hiển thị'. –

+0

@Martin Ý tôi là những gì bạn đã đề cập. nhưng dòng đó sẽ không xuất hiện theo w3s: Đặt chiều cao của vùng văn bản (theo hàng) –

+0

Thực ra, ** trạng thái W3C ** »Thuộc tính này chỉ định số dòng văn bản có thể nhìn thấy. << Không biết w3 nên là gì hoặc ở đâu báo giá đó đến từ. Cùng một nội dung, mặc dù. – Joey

Trả lời

18

Firefox luôn thêm dòng bổ sung sau trường văn bản. Nếu bạn muốn nó có một chiều cao liên tục, sử dụng CSS, ví dụ .:

textarea { 
    height: 5em; 
} 

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

EDIT: Bạn cũng có thể sử dụng phần mở rộng @-moz-document url-prefix CSS để nhắm mục tiêu chỉ trình duyệt Firefox. Ví dụ

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

Bạn có thể sửa chiều cao bằng cách sử dụng JavaScript (hoặc mã cứng có chiều cao 4x1.2 = 4.8em).

Ví dụ (JQuery), khắc phục vấn đề cho mỗi 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); 
}); 

Giá trị của line-height thuộc tính CSS bằng với chiều cao của mỗi dòng ("hàng"). Vì vậy, khi bạn đã xác định row, mã này sẽ sửa chiều cao.

Khi thuộc tính rows không được đặt, mã sẽ xem xét giá trị mặc định (.prop("rows")).

0

Tôi đã có cùng một vấn đề một lần và tôi không thể sử dụng CSS, vì vậy Javascript là cách duy nhất: Đây là cách Mootools và jQuery để làm điều này:

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); 
     } 
    }); 
} 
}); 

Nó sẽ kiểm tra xem trình duyệt có phải là firefox không, nếu có, nó sẽ kiểm tra xem các hàng đã được sửa chưa và nếu không chúng sẽ được sửa.

+1

không sửa lỗi văn bản trong trường hợp các hàng mong muốn = 1. – DragonLord

+0

$ .browser đã bị xóa kể từ jQuery 1.9.0, để làm phức tạp cuộc sống của các nhà phát triển hơn một chút. – andreszs

47

Có nhiều câu trả lời nhưng không phù hợp với tôi:

  • quy tắc CSS (height: 5em;) không phải là enoutgh linh hoạt bởi vì nó hoàn toàn ghi đè rows thuộc tính
  • Và tôi don'n muốn sử dụng Javascript

có một "lỗi": TEXTAREA incorrectly applying ROWS= and COLS=

Vì vậy, đây là sol của tôi ution:

FF thêm chiều cao vào TextArea để đặt trước vị trí cho thanh cuộn.

Tôi không cần thanh cuộn ngang để nó giúp với khắc phục sự cố: theo quy tắc css có thể được thêm vào textarea:

overflow-x: hidden; 

Here is example. Nó hoạt động ngay cả với rows=1.

+1

Đặt quá trình hoạt động hoàn toàn phù hợp với tôi, cảm ơn! Tôi nghĩ FF tạo chỗ cho thanh cuộn giải thích sự khác biệt. – rectangletangle

+1

Đối với tôi, tôi cũng phải đặt 'line-height' và' font-size' thành 1em và sau đó tất cả 3 trình duyệt trông giống hệt nhau. –

+1

Đây là câu trả lời tốt hơn câu trả lời được chấp nhận. – turibe

Các vấn đề liên quan