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?
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();
:input
zamiastinput
ciebie możesz też łatwo wyłączyć wszystkie elementyselect
itextarea
attr("disabled", true)
używaćprop("disabled", true)
api.jquery.com/prop.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.
źródło
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
źródło
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.
źródło
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.
źródło
Chciałbym albo usunąć wartość z wejścia, albo odłączyć obiekt wejściowy od DOM, aby nie istniał, aby został wysłany w pierwszej kolejności.
źródło