2010-09-27 11 views
94

Ich habe ein Eingabefeld und ich möchte es deaktiviert und gleichzeitig ausblenden, um Probleme bei der Portierung meines Formulars zu vermeiden.Hinzufügen von deaktivierten Attribut zu Eingabeelement mit Javascript

Bisher habe ich den folgenden Code meine Eingabe zu verbergen:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show().find('.longboxsmall').hide(); 
}); 

Dies ist der Eingang, die als Ergebnis versteckt werden:

<input class="longboxsmall" type="text" /> 

Wie kann ich auch das disabled-Attribut hinzufügen die Eingabe?

Antwort

218

$("input").attr("disabled", true); ab ... Ich weiß es nicht mehr.

Es ist Dezember 2013 und ich habe wirklich keine Ahnung was ich dir sagen soll.

Zuerst war es immer .attr(), dann war es immer .prop(), also kam ich hierher zurück aktualisiert die Antwort und machte es genauer.

Dann ein Jahr später änderte jQuery wieder ihre Meinung und ich will nicht einmal das verfolgen.

Lange Rede, kurzer Sinn, jetzt ist dies die beste Antwort: "Sie können beide verwenden ... aber es kommt darauf an."

Sie diese Antwort lesen sollte stattdessen: https://stackoverflow.com/a/5876747/257493

Und ihre Release Notes für diese Änderung sind hier enthalten:

Weder .attr() noch .prop() sollte für immer/Einstellung verwendet werden Wert. Verwenden Sie stattdessen die .val() -Methode (obwohl die Verwendung von .attr ("value", "somevalue") weiterhin funktioniert, wie vor 1.6).

Zusammenfassung von bevorzugten Usage

Die .prop() Methode sollte für Boolesche Attribute/Eigenschaften und Objekte verwendet werden, die in HTML (wie window.location) nicht existieren. Alle anderen Attribute (die Sie im HTML sehen können) können und sollten weiterhin mit der Methode .attr() manipuliert werden.

Oder mit anderen Worten:

".prop = Nicht-Dokument stuff"

".attr" = document Sachen

... ...

Können wir alle hier eine Lektion über API-Stabilität lernen ...

direkt
+7

+1 für das Update. Vielen Dank. – rie819

+3

+1 für die Aktualisierung der Text groß genug für mich, um darauf zu achten –

+0

@VaelVictus Nicht so schnell. Es tut mir leid zu sagen, dass sie es ein Jahr nach der Veröffentlichung wieder geändert haben ... und ich habe diese Antwort vergessen. Lesen Sie diese Antwort: http://stackoverflow.com/a/5876747/257493 – Incognito

2

Verwenden Sie einfach attr() Methode jQuery

$(this).closest("tr").next().show().find('.longboxsmall').attr('disabled', 'disabled'); 
+0

und entfernen deaktivierten Zustand mit '.removeAttr ('deaktiviert');' – ruhong

10

Sie können die DOM-Element erhalten, und die Eigenschaft disabled gesetzt.

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show() 
      .find('.longboxsmall').hide()[0].disabled = 'disabled'; 
}); 

oder wenn es mehr als eine ist, können Sie each() verwenden alle von ihnen zu setzen:

$(".shownextrow").click(function() { 
    $(this).closest("tr").next().show() 
      .find('.longboxsmall').each(function() { 
       this.style.display = 'none'; 
       this.disabled = 'disabled'; 
      }); 
}); 
5
$(element).prop('disabled', true); //true|disabled will work on all 
$(element).attr('disabled', true); 
element.disabled = true; 
element.setAttribute('disabled', true); 

Alle oben genannten sind absolut gültige Lösungen. Wählen Sie diejenige, die am besten zu Ihren Bedürfnissen passt.

+0

Die eigentliche Frage ist hier "Wie kann ich auch das deaktivierte Attribut zur Eingabe hinzufügen?" mit dem Schlüsselwort "auch". Das bedeutet, dass der OP weiß, wie er den Rest erledigt. Alles, was er eigentlich verlangt hat, ist, wie man das deaktivierte Attribut setzt. – user1596138

10

Wenn Sie jQuery verwenden, gibt es verschiedene Möglichkeiten, das deaktivierte Attribut festzulegen.

var $element = $(...); 
    $element.prop('disabled', true); 
    $element.attr('disabled', true); 

    // The following do not require jQuery 
    $element.get(0).disabled = true; 
    $element.get(0).setAttribute('disabled', true); 
    $element[0].disabled = true; 
    $element[0].setAttribute('disabled', true); 
+0

Was ist mit '$ element.eq (0) [0] .disabled = true;'? :-P – qwertynl

+1

Ja, das ist zu fortgeschritten für mich, ich gehe nicht so weit, um die Leistung zu verbessern. – iConnor

+0

+1. Obwohl es ein bisschen überflüssig ist. Wenn Sie mit einer NodeList/einem Array von Elementen zu tun haben, ist es albern, sie so über den Index auszuwählen. Iteration oder einfach nur das Element auszuwählen, das Sie brauchen, macht mehr Sinn. – user1596138

32

Arbeits Code aus meinen Quellen:

HTML WORLD

<select name="select_from" disabled>...</select> 

JS WORLD

var from = jQuery('select[name=select_from]'); 

//add disabled 
from.attr('disabled', 'disabled'); 



//remove it 
from.removeAttr("disabled"); 
+1

Als Hinweis für Leute, die von Google hierher kommen, direkt von [jQuery] (http://api.jquery.com/attr/#attr1): 'Ab jQuery 1.6 gibt die Methode .attr() für Attribute, die nicht definiert sind, zurück wurden nicht festgelegt. Verwenden Sie die Methode .prop(), um DOM-Eigenschaften wie den aktivierten, ausgewählten oder deaktivierten Status von Formularelementen abzurufen und zu ändern –

Verwandte Themen