Làm cách nào để tắt kiểu nhập = văn bản?


123

Tôi muốn tắt tính năng viết trong loại trường nhập textbằng JavaScript, nếu có thể. Trường đầu vào được điền từ cơ sở dữ liệu; đó là lý do tại sao tôi không muốn người dùng sửa đổi giá trị của nó.

Câu trả lời:


172

Nếu bạn biết điều này khi trang được hiển thị, điều này nghe có vẻ giống như bạn làm vì cơ sở dữ liệu có một giá trị, tốt hơn nên tắt nó khi được hiển thị thay vì JavaScript. Để làm điều đó, chỉ cần thêm readonlythuộc tính (hoặc disabled, nếu bạn cũng muốn xóa nó khỏi quá trình gửi biểu mẫu) vào <input>, như sau:

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

81
Tôi không biết tại sao điều này nhận được phiếu bầu, nó không trả lời câu hỏi. Chúng tôi đã mong đợi câu trả lời javascript.
Sophie

3
@Sophie đó là cách chính xác nhất để người hỏi làm điều đó dựa trên tình huống của họ, có lẽ cần thay đổi tiêu đề.
Nick Craver

6
chế độ vô hiệu hóa ngăn chặn các sự kiện nhấp chuột trên hộp nhập liệu, chỉ đọc thì không. fyi.
knutole

Để chuyển trường nhập "chỉ đọc" thành XEM giống như trường "bị vô hiệu hóa", hãy đặt 'style = "color: gray; background-color: # F0F0F0;"'. (đây là một nhận xét cho câu trả lời này )
Jake Toronto

2
Hãy nhớ rằng các trình duyệt có thể tự do bỏ qua thuộc tính "bị vô hiệu hóa" hoặc "chỉ đọc" và không nên dựa vào phương pháp này để giữ cho dữ liệu không được cập nhật một cách đáng tin cậy ... nếu mã phía máy chủ xử lý biểu mẫu vẫn sẽ chấp nhận một giá trị từ trường đó và cập nhật nó, bất kỳ ai có đủ hiểu biết để tạo biểu mẫu của riêng họ đều có thể bỏ qua "việc vô hiệu hóa" này ... điều này chỉ dành cho giao diện người dùng thuận tiện trong môi trường đáng tin cậy. Cách thực sự để ngăn chặn nó là với logic phía máy chủ.
Aaron Wallentine

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

hoặc là

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

Lưu ý rằng readOnlyphải có trong camelCase để hoạt động chính xác trong Firefox (ma thuật).

Demo: https://jsfiddle.net/L96svw3c/ - phần nào giải thích sự khác biệt giữa disabledreadOnly.


3
Điều này đã làm việc cho tôi. Phiên bản jquery là $ ('input'). Prop ('disable', true)
Daniel Sun Yang

Tôi đã trễ bảy năm về việc này - nhưng có sự khác biệt nào về ngữ nghĩa giữa hai điều này vào năm 2017 không?
Jules

2
Bạn chưa muộn chút nào, điều kỳ diệu vẫn còn đó (: Tôi không nhớ hồi đó tôi đã thử nghiệm nền tảng nào, nhưng hôm nay readonly(chữ thường) vẫn không hoạt động trong Firefox 52 trên Ubuntu - hẳn là trường hợp lạc đà.
hudolejev

Tại sao điều này không hiệu quả với tôi? Tôi đã thực hiện một inputphần tử với id="gate"và tôi cố gắng mã của bạn, mà dường như không có tác dụng đối với tôi ...
Voldemort Wrath

21

Nếu dữ liệu được điền từ cơ sở dữ liệu, bạn có thể cân nhắc không sử dụng <input>thẻ để hiển thị nó. Tuy nhiên, bạn có thể tắt nó ngay trong thẻ:

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

Nếu bạn cần tắt nó bằng Javascript sau này, bạn có thể đặt thuộc tính "vô hiệu hóa":

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

Theo <input>kinh nghiệm của tôi, lý do tôi đề nghị không hiển thị giá trị là nó gây ra các vấn đề về bố cục. Nếu văn bản dài, thì trong một <input>người dùng sẽ cần phải thử và cuộn văn bản, đây không phải là điều mà người bình thường sẽ đoán làm được. Nếu bạn chỉ thả nó vào một <span>hoặc một cái gì đó, bạn có thể linh hoạt hơn trong việc tạo kiểu.


3
Lưu ý rằng việc vô hiệu hóa có thể khiến văn bản gần như không thể đọc được trên một số trình duyệt. Bạn có thể tốt hơn với thuộc tính readonly, ví dụ: <input type = "text" value = "foo" readonly>
Olly Hodgson

7

Bạn cũng có thể bằng jquery:

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

Ví dụ làm việc:

$('#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 Bạn đang gọi setter js gốc trên đối tượng jquery, nó sẽ dẫn đến lỗi. $ ( '# foo') [0] .disabled = true hoặc $ ( '# foo') nhận được (0) .disabled = true sẽ làm công việc.
Arek Kostrzeba

6

Nhận tham chiếu đến hộp nhập liệu của bạn theo bất kỳ cách nào bạn thích (ví dụ document.getElementById('mytextbox')) và đặt thuộc tính của nó readonlythành true:

myInputBox.readonly = true;

Ngoài ra, bạn có thể chỉ cần thêm nội dòng thuộc tính này (không cần JavaScript):

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

Nếu bạn đang viết HTML (trái ngược với XHTML) sẽ là <input type = "text" value = "from db" readonly>
Olly Hodgson
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.