วิธีปิดการใช้งานประเภทอินพุต = ข้อความ?


123

ฉันต้องการปิดใช้งานการเขียนในช่องป้อนข้อมูลประเภทtextโดยใช้ JavaScript ถ้าเป็นไปได้ ช่องป้อนข้อมูลถูกเติมจากฐานข้อมูล นั่นคือเหตุผลที่ฉันไม่ต้องการให้ผู้ใช้แก้ไขค่าของมัน

คำตอบ:


172

หากคุณทราบสิ่งนี้เมื่อแสดงเพจซึ่งดูเหมือนว่าคุณทำเพราะฐานข้อมูลมีค่าควรปิดใช้งานเมื่อแสดงผลแทน JavaScript ในการทำเช่นนั้นเพียงเพิ่มreadonlyแอตทริบิวต์ (หรือdisabledถ้าคุณต้องการลบออกจากการส่งแบบฟอร์มด้วย) ใน<input>ลักษณะนี้:

<input type="text" disabled="disabled" />
//or...
<input type="text" readonly="readonly" />

81
ฉันไม่รู้ว่าเหตุใดจึงได้รับการโหวต แต่ก็ไม่ตอบคำถาม เราคาดหวังว่าจะได้รับคำตอบจากจาวาสคริปต์
โซฟี

3
@ โซฟีเป็นวิธีที่ถูกต้องที่สุดสำหรับผู้ถามที่จะทำตามสถานการณ์ของพวกเขาบางทีการเปลี่ยนชื่อก็เป็นไปตามลำดับ
Nick Craver

6
โหมดปิดใช้งานจะป้องกันเหตุการณ์การคลิกในช่องป้อนข้อมูลไม่อ่านอย่างเดียว FYI
knutole

หากต้องการให้ช่องป้อนข้อมูล "อ่านอย่างเดียว" เป็น LOOK เหมือนช่อง "ปิดใช้งาน" ให้ตั้งค่า "style =" color: gray; background-color: # F0F0F0; "' (นี่คือความคิดเห็นสำหรับคำตอบนี้ )
Jake Toronto

2
โปรดทราบว่าเบราว์เซอร์มีอิสระที่จะเพิกเฉยต่อแอตทริบิวต์ "ปิดใช้งาน" หรือ "อ่านอย่างเดียว" และไม่ควรใช้วิธีนี้เพื่อป้องกันไม่ให้ข้อมูลอัปเดตอย่างน่าเชื่อถือ ... หากการประมวลผลโค้ดฝั่งเซิร์ฟเวอร์ฟอร์มจะยังคงยอมรับ ค่าจากฟิลด์นั้นและอัปเดตทุกคนที่มีความเข้าใจเพียงพอที่จะสร้างแบบฟอร์มของตัวเองสามารถข้าม "การปิดใช้งาน" นี้ได้ ... นี่คือเพื่อความสะดวกในการติดต่อกับผู้ใช้ในสภาพแวดล้อมที่เชื่อถือได้เท่านั้น วิธีที่แท้จริงในการป้องกันคือการใช้ตรรกะฝั่งเซิร์ฟเวอร์
Aaron Wallentine

206
document.getElementById('foo').disabled = true;

หรือ

document.getElementById('foo').readOnly = true;

โปรดทราบว่าreadOnlyควรอยู่ใน camelCase เพื่อให้ทำงานได้อย่างถูกต้องใน Firefox (มายากล)

การสาธิต: https://jsfiddle.net/L96svw3c/ - ค่อนข้างอธิบายความแตกต่างระหว่างและdisabledreadOnly


3
สิ่งนี้ได้ผลสำหรับฉัน เวอร์ชัน Jquery คือ $ ('input'). prop ('disabled', true)
Daniel Sun Yang

ฉันมาช้าไปเจ็ดปี - แต่มีความแตกต่างทางความหมายระหว่างสองสิ่งนี้ในปี 2560 หรือไม่?
Jules

2
คุณยังไม่สายเลยเวทมนตร์ยังคงอยู่ที่นั่น (: ฉันจำไม่ได้ว่าฉันทดสอบแพลตฟอร์มใดในตอนนั้น แต่วันนี้readonly(ตัวพิมพ์เล็ก) ยังใช้ไม่ได้ใน Firefox 52 บน Ubuntu - ควรเป็นกรณีอูฐ
hudolejev

ทำไมสิ่งนี้ไม่เหมาะกับฉัน ฉันสร้างinputองค์ประกอบด้วยid="gate"และลองใช้รหัสของคุณซึ่งดูเหมือนจะไม่ได้ผลสำหรับฉัน ...
ความโกรธเกรี้ยวของโวลเดอมอร์

21

หากเติมข้อมูลจากฐานข้อมูลคุณอาจพิจารณาไม่ใช้<input>แท็กเพื่อแสดง อย่างไรก็ตามคุณสามารถปิดใช้งานได้ทันทีในแท็ก:

<input type='text' value='${magic.database.value}' disabled>

หากคุณต้องการปิดการใช้งานด้วย Javascript ในภายหลังคุณสามารถตั้งค่าแอตทริบิวต์ "disabled":

document.getElementById('theInput').disabled = true;

เหตุผลที่ฉันไม่แนะนำให้แสดงค่าเป็น an <input>ก็คือจากประสบการณ์ของฉันมันทำให้เกิดปัญหาการจัดวาง หากข้อความมีความยาว<input>ผู้ใช้จะต้องพยายามเลื่อนข้อความซึ่งไม่ใช่สิ่งที่คนทั่วไปจะเดาได้ หากคุณเพียงแค่วางลงใน<span>หรือบางอย่างคุณจะมีความยืดหยุ่นในการจัดแต่งทรงผมมากขึ้น


3
โปรดทราบว่าการปิดใช้งานอาจทำให้ข้อความแทบไม่สามารถอ่านได้ในบางเบราว์เซอร์ คุณอาจจะดีกว่าด้วยแอตทริบิวต์แบบอ่านอย่างเดียวเช่น <input type = "text" value = "foo" readonly>
Olly Hodgson

7

คุณยังสามารถโดย jquery:

$('#foo')[0].disabled = true;

ตัวอย่างการทำงาน:

$('#foo')[0].disabled = true;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="foo" placeholder="placeholder" value="value" />


1
@Chani Poz คุณกำลังเรียกใช้ js setter ดั้งเดิมบนวัตถุ jquery ซึ่งจะส่งผลให้เกิดข้อผิดพลาด $ ('# foo') [0] .disabled = true หรือ $ ('# foo') รับ (0) .disabled = true จะทำงาน
Arek Kostrzeba

6

รับการอ้างอิงไปยังช่องป้อนข้อมูลของคุณตามที่คุณต้องการ (เช่นdocument.getElementById('mytextbox')) และตั้งค่าreadonlyคุณสมบัติเป็นtrue:

myInputBox.readonly = true;

หรือคุณสามารถเพิ่มคุณสมบัตินี้แบบอินไลน์ (ไม่จำเป็นต้องใช้ JavaScript):

<input type="text" value="from db" readonly="readonly" />

หากคุณกำลังเขียน HTML (ตรงข้ามกับ XHTML) ซึ่งจะเป็น <input type = "text" value = "from db" readonly>
Olly Hodgson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.