2009-08-20 12 views
234

Jak dodać readonly do określonego <input>? .attr('readonly') nie działa.Jak dodać atrybut "readonly" do <input>?

+2

.attr ("readonly", true) działa, inne dont – Qiao

+3

.attr ("readonly", "readonly") działa również – Qiao

+3

To zależy od tego, którego DOCTYPE używasz. W przypadku DTD HTML 4.01 odpowiedź od CMS działa i jest poprawny HTML 4.01. Jeśli używasz DTD XHTML, to odpowiedź od ceejayoz działa i jest poprawny XHTML. – bjoernwibben

Odpowiedz

406

jQuery < 1,9

$('#inputId').attr('readonly', true); 

jQuery 1.9+

$('#inputId').prop('readonly', true); 

Więcej o difference between prop and attr

+3

nie xhtml ważny! –

+1

Czy jesteś pewien? Pomyślałem tak samo, ale nie mogę znaleźć niczego w specyfikacji. sprawdza się doskonale na validator.w3.org z xhtml 1.0 strict. –

+15

Ten post powinien zostać zmieniony na .prop() zamiast .attr(), jak określono w jQuery API: http://jquery.com/upgrade-guide/1.9/#attr-versus-prop- – frshca

19

powinien załatwić sprawę. Twój .attr('readonly') zwraca tylko wartość, nie ustawia jej.

+15

jQuery's attr() działa na właściwościach JavaScript, a nie atrybutach HTML, nawet jeśli nazwy sugerują inaczej. attr ("readonly") działa na własności HTML DOM Level 1 readOnly, która jest wartością logiczną, więc "true" jest bardziej odpowiednie. Jednak ciąg "readonly" jest również wartością truey, gdy jest automatycznie konwertowane na boolean, więc powyższe nadal działa. – bobince

+0

Nie sądzę, że chcesz ustawić atrybut na "true". Wartość '.attr' powinna być tylko łańcuchem lub liczbą, a nie boolowskim, zgodnie z dokumentacją jQuery: http://api.jquery.com/attr/#attr2 Ponadto," boolean attributes "HTML powinny być tylko pustymi ciągami lub wartość atrybutu. Myślę, że rozwiązaniem jest użycie '.prop()', aby uniknąć nieporozumień. – Luke

12

myślę "wyłączone" wyklucza wejście od wysyłane na stanowisku

+3

Tak, to prawda. Znalazłem ten wątek podczas szukania alternatywy dla "wyłączonej" właśnie z tego powodu. –

+0

ale możesz go włączyć tuż przed wysłaniem i wyłączyć później $ (document) .on ('submit', "#myform", function (e) {// enable input return true; // następnie wyłącz go ponownie, jeśli potrzebujesz} działa i przetestowałem to – Geomorillo

+0

Czy wartości wejściowe tylko do odczytu w html mogą być wysyłane na POST bez użycia ukrytego? –

5

Aby włączyć tylko do odczytu:

$("#descrip").attr("readonly","true"); 

Dla wyłączenie readonly

$("#descrip").attr("readonly",""); 
+1

Dlaczego nie '$ (" # descrip "). removeAttr (" readonly ");'? –

+0

Z http : //api.jquery.com/attr/ "Od wersji jQuery 1.6 metoda .attr() zwraca niezdefiniowane atrybuty, które nie zostały ustawione. Aby pobrać i zmienić właściwości DOM, takie jak sprawdzony, wybrany lub wyłączony stan elementy formularza, należy użyć metody .prop(). " –

+0

Atrybut nie powinien być ustawiony na ciąg" true ".To może działać, ale nie jest technicznie poprawne. (Zobacz moje poprzednie komentarze powyżej.) – Luke

11

Można wyłączyć tylko do odczytu za pomocą .removeAttr;

$('#descrip').removeAttr('readonly'); 
139

Zastosowanie $.prop()

$("#descrip").prop("readonly",true); 

$("#descrip").prop("readonly",false); 
+8

Po przeczytaniu jQuery API dla .prop, to powinna być akceptowana odpowiedź zawsze robi się .attr ("readonly", "readonly") i .removeAttr ("readonly") w przeszłości, ale wydaje się to być bardziej poprawne i sprawia, że ​​kod również staje się czystszy. –

+4

Wszyscy powinni skorzystać z tej odpowiedzi, jak podano tutaj: http://jquery.com/upgrade-guide/1.9/#attr-versus-prop- – frshca

+3

Słowo ostrzeżenia z użyciem '$ .prop()': Prop ustawi atrybuty readonly do pustego/pustego łańcucha, więc jeśli masz jakiś CSS, który używa selektora atrybutu dla '[readonly =" readonly "]', będziesz musiał zmienić to na '[readonly]' (lub dołączyć oba). – Luke

22

tylko do odczytu jest cechą, jak zdefiniowano w html, to traktuje się jak jeden.

Musisz mieć coś takiego jak readonly = "readonly" w obiekcie, z którym pracujesz, jeśli nie chcesz być edytowalny. A jeśli chcesz, aby można go było ponownie edytować, nie będziesz miał czegoś takiego jak readonly = '' (to nie jest standardowe, jeśli dobrze zrozumiałem). Naprawdę musisz usunąć atrybut jako całość.

Jako takie, przy użyciu jquery dodawanie go i usuwanie jest tym, co ma sens.

Set coś tylko do odczytu:

$("#someId").attr('readonly', 'readonly'); 

usunąć tylko do odczytu:

$("#someId").removeAttr('readonly'); 

Była to jedyna alternatywa, że ​​naprawdę pracował dla mnie. Mam nadzieję, że to pomoże!

2

Użyj właściwości setAttribute. Zwróć uwagę na przykład, że jeśli wybierzesz 1, zastosuj atrybut readonly w polu tekstowym, w przeciwnym razie usuń atrybut tylko do odczytu.

http://jsfiddle.net/baqxz7ym/2/

document.getElementById("box1").onchange = function(){ 
    if(document.getElementById("box1").value == 1) { 
    document.getElementById("codigo").setAttribute("readonly", true); 
    } else { 
    document.getElementById("codigo").removeAttribute("readonly"); 
    } 
}; 

<input type="text" name="codigo" id="codigo"/> 

<select id="box1"> 
<option value="0" >0</option> 
<option value="1" >1</option> 
<option value="2" >2</option> 
</select> 
-4

dla jQuery wersji < 1.9:

$('#inputId').attr('disabled', true); 

W wersji jQuery> = 1,9:

$('#inputId').prop('disabled', true); 
Powiązane problemy