ทำไม textarea จึงเต็มไปด้วยช่องว่างสีขาวลึกลับ?


292

ฉันมีพื้นที่ข้อความอย่างง่ายในรูปแบบเช่นนี้:

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

ฉันได้รับพื้นที่สีขาวเพิ่มเติมในtextareaนี้ เมื่อฉันแท็บเคอร์เซอร์ของฉันเป็นเหมือนกลางtextareaและไม่ได้อยู่ในจุดเริ่มต้น? คำอธิบายคืออะไร

คำตอบ:


484

ดูรหัสของคุณอย่างใกล้ชิด </textarea>ในนั้นมีอยู่แล้วสามบรรทัดและตันของพื้นที่สีขาวก่อน ลบสิ่งเหล่านั้นออกก่อนเพื่อไม่ให้มีตัวแบ่งบรรทัดระหว่างแท็กอีกต่อไป มันอาจทำเคล็ดลับแล้ว


4
@ user79685 ยินดีต้อนรับ อ่านความคิดเห็นใหม่ของฉันด้านบนฉันไม่ได้เยาะเย้ยคุณจริงๆ อย่างน้อยก็ไม่ได้อยู่ในความหมาย :)
Pekka

9
อืมฉันไม่เห็นด้วย ฉันเป็นคนที่มีไหวพริบและมารยาทในการสนทนาออนไลน์มากและฉันก็เพลิดเพลินกับเสียงโดยรวมที่เป็นมิตรกับ SO ในอีกด้านหนึ่งเราจำเป็นต้องพัฒนาสกินเล็กน้อยเมื่อเคลื่อนไหวบนเน็ตนั่นเป็นเรื่องจริง
Pekka

2
ดีมาก. ฉันกำลังเผชิญกับปัญหานี้เช่นกันและลองทำตามเคล็ดลับอื่น ๆ จากการตัดข้อความเพื่อใช้คุณสมบัติ 'ดัชนีข้อความ' (โดยใช้ css) :-D :-D (ฉันโง่แค่ไหน) ปัญหาเกิดขึ้นเพราะฉันเยื้องรหัสใน html: -? ... ขอบคุณคำตอบของคุณช่วยฉันด้วย .. :-)
Gaurav Sharma

3
และใช้แอvalueททริบิวแทนการเพิ่มข้อความในแท็ก
João Cunha

2
Oldie แต่เป็น Goodie สิ่งนี้ช่วยฉันออกวันนี้ @Pekka คุณยอดเยี่ยม!
wordman

73

ทุกอย่างระหว่าง <textarea>และ</textarea>ถูกใช้เป็นค่าเริ่มต้นสำหรับกล่องข้อความของคุณ มีตัวอย่างของพื้นที่ว่างในตัวอย่างของคุณ พยายามกำจัดสิ่งเหล่านั้นทั้งหมด


4
ขอบคุณมาก. ฉันไม่ได้ตระหนักว่าทุกสิ่งในนั้นเป็นค่าเริ่มต้น ฉันเลือกคนที่อยู่ด้านบนเพราะเขาตอบก่อนแม้ว่าเขาจะเยาะเย้ยฉัน ขอบคุณสำหรับการเกาะกลุ่มกัน
Afamee

2
มันง่ายมาก ขอบคุณมาก!
Sergio Belevskij

56

เปิด (และปิด!) แท็ก PHP ของคุณทันทีและก่อนหน้าtextareaแท็กของคุณ:

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

4
นี่เป็นวิธีที่ฉลาดในการเก็บการเยื้องไว้ในกรณีเหล่านี้ ขอบคุณ!
Sebastianb

ในที่สุดนี้ก็แก้ไขปัญหาของฉัน ขอบคุณมาก Bart
Stephen Kennedy

32

กล่าวโดยย่อ: <textarea>ควรปิดทันทีในบรรทัดเดียวกับที่เริ่ม


การปฏิบัติทั่วไป:สิ่งนี้จะเพิ่มตัวแบ่งบรรทัดและช่องว่างที่ใช้สำหรับการเยื้องในโค้ด

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

การปฏิบัติที่ถูกต้อง

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

แก้ไขปัญหาของฉัน
S.M_Emamian

นี่เป็นวิธีแก้ปัญหาที่สมบูรณ์แบบสำหรับฉันเช่นกัน
Sheldon R.

แก้ไขปัญหาของฉันทางออกที่ดี ขอบคุณ
Husnain Shabbir

26

โดยทั่วไปควรจะเป็น

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

หากมีช่องว่างที่กำหนดไว้ล่วงหน้าให้บอกว่าเนื่องจากการจัดรูปแบบรหัสด้านล่าง

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

ช่องว่างที่แสดงโดยจุดยังคงเพิ่มในแต่ละการส่ง


นี่เป็น "เคล็ดลับ" เก่า ๆ แม้บางครั้งก็ถูกลืม เรามีปัญหา HTML ตามนี้แล้วกลับไปที่ IE6 / 7 .. +1
JonSnow

บันทึกวันของฉัน ขอบคุณ!
Reuel Ribeiro

มันใช้งานได้ดี แต่มันตลกจริงๆ คำอธิบายใด ๆ เกี่ยวกับข้อผิดพลาดที่แปลกนี้
Aminu Kano

11

ช่องว่างใด ๆ ระหว่างการเปิดและปิดแท็ก textarea จะถูกพิจารณาว่าเป็นช่องว่าง ดังนั้นสำหรับโค้ดด้านบนของคุณวิธีที่ถูกต้องจะเป็น:

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

7

การทำงานอื่น ๆ ก็คือการใช้จาวาสคริปต์:

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

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

นี่คือสิ่งที่ฉันทำ การลบช่องว่างสีขาวและตัวแบ่งบรรทัดในรหัสทำให้บรรทัดยาวเกินไป


5

ในการทำให้มันดูสะอาดขึ้นลองใช้ตัวดำเนินการที่ประกอบไปด้วย:

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

2
อย่าใช้แท็กสั้น ๆ อย่าแนะนำให้คนอื่นทำ สิ่งนี้จะช่วยให้ผู้คนหลีกเลี่ยง PITA เมื่อวาง webapp บางตัวในเซิร์ฟเวอร์ที่ใช้งานจริงด้วยการกำหนดค่าที่แตกต่างกัน ขอบคุณ.
Alfabravo

4
ฉันมักจะใช้แท็กสั้น ๆ ในการสร้างเทมเพลตสถานการณ์อย่างแม่นยำเพราะฉันต้องการให้มีคนใช้มากขึ้นและทำให้ชุมชน PHP ให้การสนับสนุนพวกเขาต่อไป ที่กล่าวว่าควรใช้แท็กสั้น ๆ ในการสร้างภาพจำลองสถานการณ์เท่านั้นไม่ควรใช้ตรรกะของแอปพลิเคชันและค่อนข้างชัดเจนเฉพาะเมื่อเซิร์ฟเวอร์รองรับ รับทราบสภาพแวดล้อมการผลิตของคุณเสมอก่อนการปรับใช้ (ธรรมชาตินี้ไม่ได้เป็นสถานที่ที่จะหารือเกี่ยวกับข้อดีและข้อเสียของแท็กสั้น แต่คุณนำมันขึ้นมาเพื่อให้เป็นเหตุผลของฉัน.)
ไบรอันลูกไม้

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

การย้าย ... > ลงสำหรับฉัน


4

ฉันมีปัญหาเดียวกันและวิธีแก้ปัญหานั้นง่ายมาก: อย่าเพิ่งเริ่มบรรทัดใหม่! แม้ว่าคำตอบก่อนหน้าบางคำสามารถแก้ปัญหาได้ แต่ความคิดนั้นไม่ได้ระบุไว้อย่างชัดเจน เข้าใจสิ่งที่สำคัญคือการกำจัดช่องว่างที่ไม่ได้ตั้งใจไม่เคยเริ่มต้นบรรทัดใหม่หลังแท็กเริ่มต้นของคุณ

วิธีต่อไปนี้คือผิดและจะทำให้มีช่องว่างที่ไม่ต้องการจำนวนมากก่อนเนื้อหาข้อความของคุณ:

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

วิธีที่ถูกต้องที่จะทำคือ:

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

3

โปรดตรวจสอบให้แน่ใจว่าไม่มีการหยุดหรือการเว้นวรรคหลังจากนั้นเพื่อให้แน่ใจว่าไม่มีช่องว่างหรือแท็บเพียงแค่คัดลอกและวางรหัสนี้ :) ฉันได้แก้ไขให้คุณ

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

2

นอกจากนี้: แท็ก textarea แสดงช่องว่างสำหรับบรรทัดใหม่แท็บ ฯลฯ ในรหัสหลายบรรทัด


2

เก็บรหัส textarea โดยไม่มีช่องว่างสีขาวเพิ่มเติมภายใน

ยิ่งไปกว่านั้นถ้าคุณเห็นบรรทัดว่างเพิ่มเติมมีวิธีแก้ปัญหาในภาษาเมตา

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

มันจะพิมพ์บรรทัดโดยไม่ต้องเพิ่มบรรทัดว่างแน่นอนขึ้นอยู่กับว่าบรรทัดของคุณลงท้ายด้วย '\ n', '\ r \ n' หรือ '' - โปรดปรับ


2

พื้นที่ข้อความแสดงช่องว่างที่ลึกลับเพราะมีพื้นที่จริงอยู่ในแท็ก <textarea> <php? echo $var; ?> </textarea> หลังจากลบช่องว่างพิเศษเหล่านี้ระหว่างแท็กจะแก้ปัญหาดังต่อไปนี้ <textarea><php? echo $var; ?></textarea>


2

ทางออกหนึ่งที่ได้ผลสำหรับฉันคือการเพิ่มสไตล์white-space: normal;ให้กับ textarea เพราะบางครั้งมันเป็นไปไม่ได้ที่จะกำจัดช่องว่างทั้งหมด (ตัวอย่างเช่นเมื่อคุณต้องการให้โค้ดของคุณปฏิบัติตามแนวทางการเข้ารหัสซึ่งต้องเพิ่มแท็บช่องว่างและตัวแบ่งบรรทัด)

โปรดทราบว่าค่าเริ่มต้นสำหรับ textarea อย่างน้อยใน chrome คือ: white-space: pre-wrap;


2

หากคุณยังคงต้องการใช้การเยื้องให้ทำหลังจากเปิด<?phpแท็กดังนี้:

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

2

ฉันรู้ว่ามันสาย แต่อาจช่วยเหลือผู้อื่น

ใช้สิ่งนี้ในเมื่อจำเป็นต้องมีการเยื้องเอกสาร

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

คำถามเดียวกัน


หรือคุณสามารถจัดรูปแบบ html ของคุณอย่างถูกต้อง แต่ฉันเห็นด้วยที่อาจเป็นเรื่องยากถ้าคุณต้องการบางอย่างเช่นรหัส PHP ภายในของมัน ดังนั้นฉันเห็นด้วยกับคำตอบของคุณ
Niels Lucas

1

ฉันเทียบกับโค้ด HTML ผสมกับโค้ด PHP

อย่างไรก็ตามลองทำสิ่งนี้:

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

3
เกือบ ... ที่ยังมีสองบรรทัดใหม่
เงินล้าน

ควรใช้ <textarea style="width:350px; height:80px;" cols="42" rows="5" name="sitelink"><?php และ ?></textarea>เพื่อให้แน่ใจว่ามันบริสุทธิ์อย่างแท้จริง นอกจากนี้ฉันขอถามได้ไหมว่าทำไมคุณถึงใช้ HTML กับ PHP?
FluorescentGreen5

1

เพียงกำหนดแท็กปิดของคุณในบรรทัดเดียวกัน

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

0

นอกจากนี้เมื่อคุณบอกว่าเคอร์เซอร์อยู่ใน "กึ่งกลาง" ของ textarea มันทำให้ฉันคิดว่าคุณอาจมีช่องว่างภายในเพิ่มเติมหรือจัดแนวข้อความ: กึ่งกลางกำหนดไว้ที่ไหนสักแห่งใน CSS ของคุณ


0

ตรวจสอบให้แน่ใจก่อนว่า $ siteLink_val ของคุณไม่คืนค่า white space เป็นค่า อิลิเมนต์ <textarea> โดยค่าเริ่มต้นมีค่าว่างดังนั้นหากตัวแปรที่คุณก้องด้วยเหตุผลบางอย่างมีช่องว่างปัญหาของคุณก็จะหมดไปทันที

เพื่อให้โค้ดสะอาดที่สุดฉันขอแนะนำให้คุณทำสิ่งนี้เพื่อให้มีความยืดหยุ่นมากขึ้นในภายหลัง ฉันได้สร้างฟังก์ชั่นที่ส่งกลับค่า NULL หากตัวแปรนั้นไม่มีอยู่ (สิ่งที่คุณดูเหมือนจะเล็งไปที่โพสต์ต้นฉบับ) และค่าสัมบูรณ์ เมื่อคุณแน่ใจในเนื้อหาตัวแปรแล้วให้ลองทำดังนี้:

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

     else {
          return "";
     }
}

$output_siteLink_val = build_siteLink_val();

และรหัสต่อไปนี้ใน textarea ของคุณจะอ่าน:

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

นี่คือการสมมติว่าการติดตั้ง PHP ของคุณได้รับการกำหนดค่าสำหรับการโทรแบบแปรผันทางสั้นตามที่เห็นในแท็ก "<? =?>" ที่ย่อลง หากคุณไม่สามารถใช้วิธีนี้ได้โปรดอย่าลืมนำโค้ด PHP ของคุณด้วย "<? php" และปิดด้วย "?>"

หลีกเลี่ยงการขึ้นบรรทัดใหม่ระหว่าง <textarea> เพราะสามารถสร้างศักยภาพของอักขระที่ผิดพลาดได้

ตรวจสอบ CSS ของคุณเพื่อให้แน่ใจว่าไม่มีกฎการเว้นระยะในการพุชข้อความเข้าด้านใน

นอกจากนี้คุณระบุค่า cols และแถวบน textarea จากนั้นกำหนดสไตล์ความกว้างและความสูง กฎเหล่านี้มีผลต่อต้านและจะส่งผลให้เกิดภาพที่ไม่สอดคล้องกัน ติดกับการกำหนดขนาดผ่านสไตล์ (ฉันขอแนะนำให้องค์ประกอบชั้นเรียน) หรือแถว / cols

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.