Wyobraź sobie, że masz formularz, w którym zmieniasz widoczność kilku pól. A jeśli pole nie jest wyświetlane, nie chcesz, aby jego wartość była żądana.
Jak sobie radzisz w tej sytuacji?
Odpowiedzi:
Ustawienie elementu formularza na wyłączony spowoduje, że nie będzie on trafiał na serwer, np .:
<input disabled="disabled" type="text" name="test"/>
W javascript oznaczałoby to coś takiego:
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();
.prop()
zamiast .attr()
jest zalecane w celu uzyskania ORAZ ustawiania 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 rezultaty. Przeczytaj dokumentację jQuery, zanim skomentujesz, do czego odnosi się yorch.
Możesz użyć javascript, aby ustawić wyłączony atrybut. Zdarzenie polegające na kliknięciu przycisku „Prześlij” jest prawdopodobnie najlepszym miejscem do tego.
Jednak odradzałbym to w ogóle. Jeśli to możliwe, powinieneś filtrować zapytanie na serwerze. To będzie bardziej niezawodne.
Jeśli chcesz wyłączyć wszystkie elementy lub niektóre elementy w ukrytym elemencie nadrzędnym, możesz użyć
$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");
Ten przykład http://jsfiddle.net/gKsTS/ wyłącza wszystkie pola tekstowe w ukrytym div
Co powiesz na:
$('#divID').children(":input").prop("disabled", true); // disable
i
$('#divID').children(":input").prop("disabled", false); // enable
Aby przełączyć wszystkie dzieci wejściowe (zaznaczenia, pola wyboru, dane wejściowe, obszary tekstowe itp.) Wewnątrz ukrytego elementu div.
Bardzo prostym (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.
:input
zamiastinput
ciebie możesz też łatwo wyłączyć wszystkie elementyselect
itextarea