Immagina di avere un modulo in cui cambi la visibilità di diversi campi. E se il campo non viene visualizzato, non vuoi che il suo valore sia richiesto.
Come gestisci questa situazione?
Risposte:
L'impostazione di un elemento del modulo su disabilitato ne impedirà l'accesso al server, ad esempio:
<input disabled="disabled" type="text" name="test"/>
In javascript significherebbe qualcosa del genere:
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();
In jQuery:
$('form > input:hidden').attr("disabled",true);
$('form').submit();
attr("disabled", true)
dovresti usare prop("disabled", true)
api.jquery.com/prop
.prop()
invece di .attr()
per ottenere AND impostare le proprietà sia disabilitate che controllate. Il controllo e / o l'impostazione utilizzando .attr()
in alcuni casi restituiranno risultati indesiderati. Si prega di leggere la documentazione di jQuery prima di commentare a cosa si riferiva yorch.
È possibile utilizzare javascript per impostare l'attributo disabilitato. L'evento clic sul pulsante "invia" è probabilmente il posto migliore per farlo.
Tuttavia, consiglierei di non farlo affatto. Se possibile, dovresti filtrare la tua query sul server. Questo sarà più affidabile.
Se vuoi disabilitare tutti gli elementi o determinati elementi all'interno di un elemento genitore nascosto, puoi usare
$("div").filter(":hidden").children("input[type='text']").attr("disabled", "disabled");
Questo esempio http://jsfiddle.net/gKsTS/ disabilita tutte le caselle di testo all'interno di un div nascosto
Che dire:
$('#divID').children(":input").prop("disabled", true); // disable
e
$('#divID').children(":input").prop("disabled", false); // enable
Per attivare / disattivare tutti gli input figli (seleziona, caselle di controllo, input, aree di testo, ecc.) All'interno di un div nascosto.
Una soluzione molto semplice (ma non sempre la più conveniente) è rimuovere l'attributo "nome": lo standard richiede che i browser non inviino valori senza nome e tutti i browser che conosco rispettano questa regola.
:input
invece diinput
te puoi anche disabilitare facilmente tutti gli elementiselect
etextarea