2009-08-20 16 views
234

Wie kann ich readonly zu einem bestimmten <input> hinzufügen? .attr('readonly') funktioniert nicht.Wie fügt man ein "readonly" Attribut zu einem hinzu?

+2

.attr ('readonly', true) funktioniert, andere nicht – Qiao

+3

.attr ('readonly', 'readonly') funktioniert auch – Qiao

+3

Es hängt davon ab, welche DOCTYPE Sie verwenden. Für HTML 4.01 DTDs funktioniert die Antwort von CMS und valides HTML 4.01. Wenn Sie eine XHTML-DTD verwenden, dann funktioniert die Antwort von ceejayoz und das gültige XHTML. – bjoernwibben

Antwort

406

jQuery < 1,9

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

jQuery 1.9+

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

Lesen Sie mehr über difference between prop and attr

+3

nicht xhtml gültig! –

+1

Sind Sie sicher? Das habe ich mir auch gedacht, kann aber in den Spezifikationen nichts finden. validiert perfekt auf validator.w3.org mit xhtml 1.0 strict. –

+15

Dieser Beitrag sollte in .prop() anstelle von .attr() geändert werden, wie in der jQuery-API angegeben: http://jquery.com/upgrade-guide/1.9/#attr-versus-prop- – frshca

19

.attr('readonly', 'readonly') sollte den Trick tun. Ihr .attr('readonly') gibt nur den Wert zurück, es setzt keinen.

+15

jQuery's attr() arbeitet an JavaScript-Eigenschaften, nicht an HTML-Attributen, obwohl die Namen etwas anderes bedeuten. attr ('readonly') arbeitet tatsächlich mit der HTML-Eigenschaft readOnly des DOM Level 1, was ein Boolescher Wert ist, also ist 'true' geeigneter. Die Zeichenfolge "readonly" ist jedoch auch ein truthy-Wert, wenn sie automatisch in einen booleschen Wert konvertiert wird. – bobince

+0

Ich glaube nicht, dass Sie das Attribut auf 'wahr' setzen möchten. Der '.attr'-Wert sollte laut den jQuery-Dokumenten nur ein String oder eine Zahl sein, kein boolescher Wert: http://api.jquery.com/attr/#attr2 Außerdem sollte HTML "boolesche Attribute" nur eine leere Zeichenfolge sein oder der Wert des Attributs. Ich denke, die Lösung ist '.prop()' zu verwenden, um Verwirrung zu vermeiden. – Luke

12

Ich denke "disabled" schließt die Eingabe von auf der POST gesendet werden

+3

Ja, tut es. Ich habe diesen Thread gefunden, als ich gerade nach einer Alternative zu "deaktiviert" gesucht habe. –

+0

aber Sie können es aktivieren, bevor Sie es senden, und deaktivieren Sie es später $ (Dokument) .on ('senden', "#myform", Funktion (e) {// aktivieren Eingaben zurück, true; // dann wieder deaktivieren, wenn Sie benötigen} es funktioniert Ich testete es – Geomorillo

+0

Liest nur Eingabewerte in HTML sind erlaubt, auf POST ohne Verwendung versteckter? –

5

Zum Aktivieren von Nur lesen:

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

Zum Deaktivieren von Nur-Lese-

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

Warum nicht '$ (" # descrip "). removeAttr (" readonly ");'? –

+0

Von http : //api.jquery.com/attr/ "Ab jQuery 1.6 gibt die Methode .attr() für nicht gesetzte Attribute undefined zurück. Zum Abrufen und Ändern von DOM-Eigenschaften wie dem aktivierten, ausgewählten oder deaktivierten Status von Formularelemente, verwenden Sie die .prop() -Methode. " –

+0

Das Attribut sollte nicht auf eine Zeichenfolge von" True "festgelegt werden. Dies funktioniert möglicherweise, ist aber technisch nicht korrekt. (Siehe meine vorherigen Kommentare.) – Luke

11

Sie können die Nur-Lese-deaktivieren, indem Sie die .removeAttr verwendet wird;

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

Verwenden $.prop()

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

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

Nach dem Lesen der jQuery API für .prop, das sollte die akzeptierte Antwort sein in der Vergangenheit immer .attr ('readonly', 'readonly') und .removeAttr ('readonly') gemacht, aber das scheint korrekter zu sein und macht den Code sauberer. –

+4

Jeder sollte diese Antwort verwenden, wie hier angegeben: http://jquery.com/upgrade-guide/1.9/#attr-versus-prop- – frshca

+3

Ein Wort der Vorsicht mit <$. Prop() ': Prop wird gesetzt das Attribut readonly in leerem/leerem String. Wenn Sie also ein CSS haben, das den Attributselektor für '[readonly =" readonly "]' verwendet, müssen Sie dies in '[readonly]' ändern (oder beides einschließen)). – Luke

22

READONLY ein Attribut wie in HTML definiert, so dass es wie ein behandeln.

Sie müssen wie etwas haben, nur lesbar = „Nur-Lesen“ in dem Objekt mit dem Sie arbeiten, wenn Sie es nicht editierbar zu sein. Und wenn Sie möchten, dass es wieder bearbeitet werden kann, haben Sie nicht so etwas wie readonly = '' (das ist nicht Standard, wenn ich es richtig verstanden habe). Sie müssen das Attribut als Ganzes wirklich entfernen.

Als solche, jQuery Hinzufügen und Entfernen ist es sinnvoll.

Set etwas nur lesbar:

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

entfernen Read-only:

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

Dies war die einzige Alternative, die wirklich für mich gearbeitet. Hoffe es hilft!

2

Verwenden Sie die setAttribute-Eigenschaft. Beachten Sie, dass bei Auswahl von 1 das Attribut readonly auf das Textfeld angewendet wird, andernfalls entfernen Sie das Attribut readonly.

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

Für jQuery Version < 1.9:

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

Für jQuery-Version> = 1.9:

$('#inputId').prop('disabled', true); 
Verwandte Themen