2010-09-27 17 views
94

Mam pole wejściowe i chcę, aby go wyłączyć, a jednocześnie ukryć, aby uniknąć problemów podczas przenoszenia mojego formularza.Dodaj atrybut wyłączony do elementu wejściowego za pomocą Javascriptu

tej pory mam następujący kod do ukrycia moje wejście:

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

jest to wejście, które zostaje ukryty w wyniku:

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

Jak mogę też dodać atrybut disabled do wejście?

Odpowiedz

218

$("input").attr("disabled", true); od ... Nie wiem więcej.

Jest grudzień 2013 i naprawdę nie mam pojęcia, co powiedzieć.

Najpierw zawsze było .attr(), to zawsze było .prop(), więc wróciłem tutaj zaktualizowałem odpowiedź i uczyniłem ją dokładniejszą.

Potem rok później jQuery ponownie zmieniło zdanie i nie chcę nawet tego śledzić.

Krótka historia, od tej chwili jest to najlepsza odpowiedź: "możesz użyć obu ... ale to zależy."

Należy przeczytać tę odpowiedź Zamiast: https://stackoverflow.com/a/5876747/257493

A ich Uwagi do wydania tej zmiany są zawarte tutaj:

Ani .attr() ani .prop() powinny być wykorzystywane do pobierania/ustawiania wartość. Zamiast tego użyj metody .val() (chociaż użycie .attr ("value", "somevalue") będzie działało, tak jak przed 1.6).

Streszczenie korzystnego użycia

Sposób .prop() powinny być stosowane dla operacji atrybutów/właściwości i właściwości, które nie istnieją w HTML (takie jak window.location). Wszystkie pozostałe atrybuty (widoczne w html) mogą i powinny być modyfikowane przy użyciu metody .attr().

Lub innymi słowy:

"rzeczy .prop = non-dokument"

".attr" = rzeczy dokument

... ...

Obyśmy wszyscy dowiedzieli się tutaj o stabilności API ...

+7

+1 do aktualizacji. Dzięki. – rie819

+3

+1 za aktualizację tekstu wystarczająco dużego, bym mógł zwrócić na niego uwagę. –

+0

@VaelVictus Nie tak szybko. Przykro mi to mówić, że zmienili to ponownie rok po tym, jak to opublikowałem ... i zapomniałem o tej odpowiedzi. Przeczytaj tę odpowiedź: http://stackoverflow.com/a/5876747/257493 – Incognito

2

Wystarczy użyć jQuery attr() metoda

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

i usuń stan wyłączony, używając '.removeAttr ('disabled');' – ruhong

10

można uzyskać elementu DOM, i ustawić właściwość wyłączoną bezpośrednio.

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

lub jeśli jest więcej niż jeden, można użyć each() ustawić wszystkie z nich:

$(".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); 

Wszystkie powyższe rozwiązania są całkowicie poprawny. Wybierz ten, który najlepiej pasuje do Twoich potrzeb.

+0

Rzeczywiste pytanie tutaj brzmi "Jak mogę dodać atrybut disabled do danych wejściowych?" ze słowem kluczowym będącym "również". O tym, że OP wie, jak zrobić resztę, wszystko, o co właściwie prosił, to jak ustawić wyłączony atrybut. – user1596138

10

Jeśli używasz jQuery, istnieje kilka różnych sposobów ustawiania wyłączonego atrybutu.

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

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

+1

Tak, to jest dla mnie zaawansowane, nie posuwam się tak daleko, żeby poprawić wydajność. – iConnor

+0

+1. Chociaż jest nieco zbędny. Jeśli masz zamiar radzić sobie z NodeList/tablicą elementów, to głupio jest wybrać je przez taki indeks. Iteracja lub po prostu wybór tylko tego elementu, który potrzebujesz, ma więcej sensu. – user1596138

32

Praca kod z moich źródeł:

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

Jako notatkę dla osób przybywających tutaj z Google, bezpośrednio z [jQuery] (http://api.jquery.com/attr/#attr1): 'Od jQuery 1.6, metoda .attr() zwraca niezdefiniowaną dla atrybutów, które nie zostały ustawione. Aby pobrać i zmienić właściwości DOM, takie jak sprawdzony, wybrany lub wyłączony stan elementów formularza, użyj metody .prop(). –

Powiązane problemy