2009-09-03 5 views

Odpowiedz

118

Ustawianie element formularza dla osób niepełnosprawnych przestanie idzie do serwera, np:

<input disabled="disabled" type="text" name="test"/> 

w JavaScript oznaczałoby to mniej więcej tak:

var inputs = document.getElementsByTagName('input'); 
for(var i = 0;i < inputs.length; i++) { 
    if(inputs[i].style.display == 'none') { 
     inputs[i].disabled = true; 
    } 
} 
document.forms[0].submit(); 

w jQuery:

$('form > input:hidden').attr("disabled",true); 
    $('form').submit(); 
+15

Z pseudo-selektorem jQuery ': input' zamiast' input' możesz także łatwo wyłączyć wszystkie elementy 'select' i' textarea' –

+8

W jQuery> = 1.6, zamiast 'attr (" disabled ", true)' ty powinien używać 'prop (" wyłączony ", prawda)' http://api.jquery.com/prop/ – yorch

+2

@ dominicbri7 - Od wersji jQuery 1.6 zaleca się użycie '.prop()' zamiast '.attr()' do uzyskania ustawienia ORAZ zarówno wyłączonych, jak i sprawdzonych właściwości. Sprawdzenie i lub ustawienie przy użyciu '.attr()' w niektórych przypadkach zwróci niepożądane wyniki. Proszę przeczytać dokumentację jQuery przed skomentowaniem tego, co yorch miał na myśli. – zgr024

1

Chciałbym usunąć wartość z danych wejściowych lub odłączyć obiekt wejściowy od DOM, więc nie istnieje, aby zostać wysłana w pierwszej kolejności.

13

Można użyć javascript do ustawienia wyłączonego atrybutu. Zdarzenie kliknięcia przycisku "wyślij" jest prawdopodobnie najlepszym miejscem do zrobienia tego.

Jednak odradzam robienie tego w ogóle. Jeśli to możliwe, powinieneś filtrować zapytanie na serwerze. Będzie to bardziej wiarygodne.

7

Jeśli chcesz wyłączyć wszystkie elementy lub niektóre elementy wewnątrz ukrytego elementu nadrzędnego, można użyć

$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled"); 

Ten przykład http://jsfiddle.net/gKsTS/ wyłączenie wszystkich pól tekstowych w ukrytym div

+0

To jest bardzo dobre rozwiązanie, ponieważ jest iterowane przez ukryty div i wyłącza wszystkie. Powinien dostać więcej +1 – yeppe

3

Jeden bardzo prosty (ale nie zawsze najwygodniejszym) rozwiązaniem jest usunięcie atrybutu "nazwa" - standard wymaga, aby przeglądarki nie wysyłały nienazwanych wartości, a wszystkie przeglądarki, które znam, przestrzegają tej zasady.

+3

Nie polecam, ponieważ jeśli zmienisz stany za pomocą javascript, trudno będzie zresetować dane wejściowe bez buforowania wszystkich atrybutów nazwy. Łatwiej jest zmienić stan wyłączony. – Simon

4

Co o:

$('#divID').children(":input").prop("disabled", true); // disable 

i

$('#divID').children(":input").prop("disabled", false); // enable 

Aby włączyć wszystkie dzieci wejść (Wybiera, pól, wejściowe, pola tekstowe, itp) wewnątrz ukryty div.

+0

To świetne rozwiązanie, jeśli chcesz pobrać wszystkie dane wejściowe. dobra robota – doz87

Powiązane problemy