Tại sao textarea chứa đầy khoảng trắng bí ẩn?


292

Tôi có một vùng văn bản đơn giản trong một hình thức như thế này:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
    <?php if($siteLink_val) echo $siteLink_val; ?> 
</textarea>

Tôi tiếp tục nhận được thêm khoảng trắng trong textarea này . Khi tôi tab vào nó, con trỏ của tôi giống như ở giữa vùng văn bản và không phải lúc bắt đầu? Giải thích là gì?

Câu trả lời:


484

Nhìn kỹ vào mã của bạn. Trong đó, đã có ba ngắt dòng và một tấn khoảng trắng trước đó </textarea>. Xóa những cái đầu tiên để không còn ngắt dòng giữa các thẻ nữa. Nó có thể đã thực hiện các mẹo.


4
@ user79685 bạn được chào đón. Đọc bình luận mới của tôi ở trên, tôi đã không thực sự chế giễu bạn. Ít nhất là không phải theo một cách có ý nghĩa :)
Pekka

9
Mmm, tôi không đồng ý với điều đó. Tôi rất thích chiến thuật và nghi thức trong các cuộc thảo luận trực tuyến và tôi thích giai điệu rất thân thiện trên SO. Mặt khác, người ta cần phát triển một chút da khi di chuyển trên mạng, đó là sự thật.
Pekka

2
rất đẹp. Tôi cũng đã phải đối mặt với vấn đề này và đã thử mọi thủ thuật khác từ cắt xén văn bản đến áp dụng thuộc tính 'text-index' (sử dụng css) :-D :-D. (Tôi thật ngốc nghếch). Đã xảy ra sự cố do tôi thụt mã trong html: -? ... Cảm ơn, câu trả lời của bạn cũng giúp tôi .. :-)
Gaurav Sharma

3
Ngoài ra, sử dụng valuethuộc tính thay vì thêm văn bản bên trong các thẻ.
João Cunha

2
Một oldie nhưng một goodie. Điều này đã giúp tôi ra ngoài ngày hôm nay. @Pekka bạn thật tuyệt vời!
wordman

73

Chà, mọi thứ giữa <textarea></textarea>được sử dụng làm giá trị mặc định cho hộp văn bản của bạn. Có một số khoảng trắng trong ví dụ của bạn ở đó. Hãy cố gắng loại bỏ tất cả những điều đó.


4
cảm ơn rất nhiều. Tôi đã không nhận ra rằng mọi thứ ở giữa là mặc định. Tôi đã chọn anh chàng trên đầu vì anh ta trả lời trước mặc dù anh ta chế giễu tôi. Cảm ơn đã gắn bó với folks.
Afamee

2
Thật đơn giản. Cảm ơn rất nhiều!
Sergio Belevskij

56

Mở (và đóng!) Các thẻ PHP của bạn ngay sau và trước các textareathẻ của bạn :

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php
  if($siteLink_val) echo $siteLink_val;
?></textarea>

4
đây là một cách thông minh để giữ vết lõm trong những trường hợp này. Cảm ơn!
Sebastianb

Điều này cuối cùng đã khắc phục vấn đề của tôi. Cảm ơn rất nhiều Bart
Stephen Kennedy

32

Tóm lại: <textarea>nên được đóng ngay lập tức trên cùng một dòng nơi nó bắt đầu.


Thực hành chung: điều này sẽ thêm các ngắt dòng và khoảng trắng được sử dụng để thụt lề trong mã.

<textarea id="sitelink" name="sitelink">
</textarea>

Thực hành đúng

<textarea id="sitelink" name="sitelink"></textarea>

Giải quyết vấn đề của tôi.
S.M_Emamian

Đây cũng là giải pháp hoàn hảo cho tôi
Sheldon R.

Giải quyết vấn đề của tôi, giải pháp tuyệt vời. Cảm ơn
Husnain Shabbir

26

Về cơ bản nó nên

<textarea>something here with no spaces in the begining</textarea>

Nếu có một số khoảng trắng được xác định trước, hãy nói do định dạng mã như bên dưới

<textarea>.......
....some_variable
</textarea>

Các khoảng trắng được hiển thị bằng dấu chấm tiếp tục thêm vào mỗi lần gửi.


Đây là một "mánh khóe" cũ, thậm chí đôi khi bị lãng quên. Chúng tôi đã có các sự cố HTML dựa trên điều này quay trở lại IE6 / 7 .. +1
JonSnow

Cứu ngày của tôi. Cảm ơn!
Reuel Ribeiro

Nó hoạt động tốt, nhưng nó thực sự hài hước. Bất kỳ lời giải thích về lỗi kỳ lạ này?
Aminu Kano

11

Bất kỳ khoảng trống nào giữa các thẻ mở và đóng của textarea sẽ được coi là khoảng trắng. Vì vậy, đối với mã trên của bạn, cách chính xác sẽ là:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo $siteLink_val; ?></textarea>

7

Một công việc khác sẽ là sử dụng javascript:

//jquery
$('textarea#someid').html($('textarea#someid').html().trim());

//without jquery
document.getElementById('someid').innerHTML = document.getElementById('someid').innerHTML.trim();

Đây là những gì tôi đã làm. Loại bỏ khoảng trắng và ngắt dòng trong mã làm cho dòng quá dài.


5

Để làm cho nó trông gọn gàng hơn một chút, hãy xem xét sử dụng toán tử ternary:

<textarea><?=( $siteLink_val ? $siteLink_val : '' );?></textarea>

2
Đừng sử dụng các thẻ ngắn, đừng đề nghị người khác làm như vậy. Điều này sẽ giúp mọi người tránh PITA khi đặt một số ứng dụng web vào một máy chủ sản xuất có cấu hình khác. Cảm ơn bạn.
Alfabravo

4
Tôi luôn sử dụng các thẻ ngắn trong các kịch bản tạo khuôn mẫu chính xác vì tôi muốn nhiều người sử dụng chúng hơn và do đó khuyến khích cộng đồng PHP tiếp tục hỗ trợ chúng. Điều đó nói rằng, CHỈ các thẻ ngắn nên được sử dụng trong các tình huống tạo khuôn mẫu, KHÔNG BAO GIỜ trong logic ứng dụng và rõ ràng là CHỈ khi máy chủ hỗ trợ chúng. Luôn biết môi trường sản xuất của bạn trước khi triển khai. (Đương nhiên, đây không phải là nơi để thảo luận về ưu và nhược điểm của các thẻ ngắn, nhưng bạn đã đưa nó lên, vì vậy đó là lời biện minh của tôi.)
Brian Lacy

4
<textarea style="width:350px; 
 height:80px;" cols="42" rows="5" name="sitelink"
 ><?php if($siteLink_val) echo $siteLink_val; ?></textarea> 

Di chuyển ...> xuống làm việc cho tôi.


4

Tôi có cùng một vấn đề và giải pháp rất đơn giản: đừng bắt đầu một dòng mới! Mặc dù một số câu trả lời trước có thể giải quyết vấn đề, ý tưởng không được nêu rõ ràng. Các sự hiểu biết quan trọng là, để thoát khỏi những không gian ngoài ý muốn, không bao giờ bắt đầu một dòng mới ngay sau khi bắt đầu từ khóa của bạn.

Cách sau đây là SAI và sẽ để lại nhiều khoảng trống không mong muốn trước nội dung văn bản của bạn:

 <textarea>
    text content // start with a new line will leave a lot of unwanted spaces
 </textarea>

CÁCH QUYỀN để làm điều đó là:

 <textarea>text content //put text content right after your start tag, no new line
 </textarea>

3

Vui lòng đảm bảo không có ngắt dòng hoặc dấu cách sau, để đảm bảo không có khoảng trắng hoặc tab, chỉ cần sao chép và dán mã này :) Tôi đã sửa nó cho bạn

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php if($siteLink_val) echo trim($siteLink_val);?></textarea>

2

Hơn nữa: thẻ textarea hiển thị khoảng trắng cho các dòng, tab mới, v.v., trong mã đa dòng.


2

giữ mã textarea không có khoảng trắng bên trong

hơn nữa, nếu bạn thấy các dòng trống bổ sung, có giải pháp trong ngôn ngữ meta:

<textarea>
for line in lines:
echo line.replace('\n','\r')
endfor
</textarea>

tất nhiên nó sẽ in các dòng mà không cần thêm các dòng trống, điều này phụ thuộc vào việc các dòng của bạn kết thúc bằng '\ n', '\ r \ n' hay '' - vui lòng điều chỉnh


2

Vùng văn bản hiển thị các không gian bí ẩn vì có một không gian thực tồn tại trong các thẻ. <textarea> <php? echo $var; ?> </textarea> sau khi loại bỏ các khoảng trắng thừa giữa các thẻ sẽ giải quyết vấn đề, như sau. <textarea><php? echo $var; ?></textarea>


2

Một giải pháp hiệu quả với tôi là thêm kiểu white-space: normal;vào textarea vì đôi khi không thể loại bỏ tất cả khoảng trắng (ví dụ: khi bạn muốn mã của mình tuân theo các nguyên tắc mã hóa của bạn, yêu cầu thêm tab, khoảng trắng và ngắt dòng)

Xin lưu ý rằng mặc định cho textarea, ít nhất là trong chrome là: white-space: pre-wrap;


2

Nếu bạn vẫn thích sử dụng thụt lề, hãy thực hiện sau khi mở <?phpthẻ, như vậy:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php // <--- newline
    if($siteLink_val) echo $siteLink_val; // <--- indented, newline
?></textarea>

2

Tôi biết muộn nhưng có thể giúp đỡ người khác.

sử dụng điều này khi thụt tài liệu được yêu cầu.

$('document').ready(function()
{
    $('textarea').each(function(){
            $(this).val($(this).val().trim());
        }
    );
});

cùng một câu hỏi


Hoặc bạn có thể định dạng html chính xác. Nhưng tôi đồng ý rằng có thể khó một cái gì đó nếu bạn muốn một cái gì đó như mã php bên trong nó. Vì vậy, tôi đồng ý với câu trả lời của bạn.
Niels Lucas

1

Tôi chống lại mã HTML trộn lẫn với mã PHP.

Tuy nhiên hãy thử điều này:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink">
<?php 
    if($siteLink_val) 
        echo trim($siteLink_val);
?> 
</textarea>

3
Hầu như ... điều đó vẫn bao gồm hai dòng mới.
amarillion

Nên sử dụng <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php?></textarea>để đảm bảo rằng nó thực sự tinh khiết. Ngoài ra, tôi có thể hỏi tại sao bạn chống lại HTML với PHP không?
Huỳnh quangGreen5

1

Chỉ cần xác định thẻ của bạn và đóng trong cùng một dòng.

<textarea class="form-control"
          id="newText"
          rows="6"
          placeholder="Your placeholder here..."
          required
          name="newText"></textarea>

0

Ngoài ra, khi bạn nói rằng con trỏ nằm ở "giữa" của textarea, điều đó khiến tôi nghĩ rằng bạn cũng có thể có thêm phần đệm hoặc text-align: centre được xác định ở đâu đó trong CSS của bạn.


0

Trước tiên, hãy đảm bảo rằng $ siteLink_val của bạn không trả về khoảng trắng dưới dạng giá trị. Phần tử <textarea> theo mặc định có một giá trị trống, vì vậy nếu biến bạn đang lặp lại vì một lý do nào đó có khoảng trắng, thì vấn đề của bạn sẽ ngay lập tức.

Để làm cho mã sạch nhất tuyệt đối, tôi sẽ đề nghị bạn có thể làm một cái gì đó như thế này, cho phép linh hoạt hơn sau này. Tôi đã tạo một hàm trả về NULL nếu biến không xuất hiện (điều mà bạn dường như đang nhắm đến trong bài viết gốc) và giá trị tuyệt đối khác. Khi bạn đã chắc chắn về nội dung của biến, hãy thử điều này:

function build_siteLink_val() {
     if ( $siteLink_val ) {
          return $siteLink_val;
     }

     else {
          return "";
     }
}

$output_siteLink_val = build_siteLink_val();

Và đoạn mã sau trong textarea của bạn bây giờ sẽ đọc:

<textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?=$output_siteLink_val?></textarea>

Điều này giả sử cài đặt PHP của bạn được cấu hình cho các cuộc gọi biến ngắn, như được thấy trong các thẻ "<? =?>" Rút gọn. Nếu bạn không thể xuất ra theo cách này, hãy nhớ mở đầu mã PHP của bạn bằng "<? Php" và đóng bằng "?>".

Tránh ngắt dòng giữa <textarea> vì nó có thể tạo ra tiềm năng của các ký tự sai.

Ngoài ra, hãy kiểm tra CSS của bạn để đảm bảo không có quy tắc đệm đẩy văn bản vào trong.

Ngoài ra, bạn chỉ định giá trị cols và hàng trên textarea, sau đó định kiểu chiều rộng và chiều cao. Các quy tắc này là phản tác dụng, và sẽ dẫn đến hình ảnh không nhất quán. Tiếp tục xác định kích thước thông qua kiểu (tôi khuyên bạn nên cung cấp cho phần tử một lớp) hoặc các hàng / cols.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.