2010-07-11 10 views
9

Ho un elemento del modulo che contiene circa 5 campi che la query finale sta per creare elaborando i valori di quei campi. Quindi voglio inviare solo la query finale, non tutte quelle, al server. Come posso escludere quei campi dall'essere inviati (usando jQuery)?Come impedire all'elemento del modulo di inviare alcuni campi che non vogliamo?

<form action="abc/def.aspx" method="get"> 
    <input type="text" name="field1" /> 
    <input type="text" name="field2" /> 
    <input type="text" name="field3" /> 
    <input type="text" name="field4" /> 
    <input type="text" name="field5" /> 
    <input type="hidden" name="final" /> 
    <input type="submit" value="Send" /> 
</form> 

uscita del modulo di presentazione si presenta come di seguito:

abc/def.aspx?field1=val1&field2=val2&field3=val3&field4=val4&field5=val5&final=finalQuery 
+0

Si sta utilizzando jQuery per fare lo presentare attualmente, o si tratta di un '

'? –

+0

entrambi, ma voglio un approccio quando il browser JavaScript è disattivato che funziona correttamente;) – Sadegh

+0

Hai tre opzioni: (1) Imposta gli attributi 'disabled' su' true' per i campi. (2) Rimuovere gli attributi '' name' dei campi. (3) Rimuovere i campi dal DOM. – caw

risposta

11

Rimuovere l'elemento su submit.

Al gestore onsubmit:.

$(formElement).submit(function() { 
    $(this.field1).remove(); //removing field 1 from query 
    return true; //send 
}); 

Disabilitare l'elemento del modulo ferma anche che venga inserito nella query (testato su Chrome)

$(formElement).submit(function() { 
    this.field1.disabled = true; 
    return true; //send 
}); 
+0

+1 - Per una versione completa, solo '$ (': text', this) .remove();' funziona, non è necessario alcun ritorno. –

+0

In alternativa, lo script potrebbe semplicemente disabilitare gli input. Immagino che non importa se si tratta di un semplice invio di moduli, ma se si tratta di un invio di moduli Ajax potresti desiderare che i campi siano ancora lì in seguito, ed è un po 'più semplice impostare "disabilitato" su falso che non mettere gli ingressi indietro. – Pointy

+0

hm ... utilizzando i campi modulo disattivati ​​per l'approccio anche se la convalida del modulo non è valida. come posso verificare se la convalida del modulo è vera, quindi disabilitare i campi? – Sadegh

0

Penso che la soluzione migliore è quella di gestire Invia e invia la richiesta da te:

$(form).submit(function() { 
    //do everything you need in here to get the final result 
    var finalResult = alotoflogic(); 
    $.get("abc/def.aspx",final=finalResult, "callbackfunction", "responseType"); 
    return false; 
}); 

che dovrebbe fare esattamente quello che vuoi t. EDIT: come Alex ha sottolineato questa soluzione wouldnt inviarti a quella pagina, basta avere i risultati, se avete bisogno di andare alla nuova pagina che si può fare:

$(form).submit(function() { 
    //do everything you need in here to get the final result 
    var finalResult = alotoflogic(); 
    window.location('abc/def.aspx?final='+finalResult); 
    return false; 
}); 

In questo modo il browser viene reindirizzato a quella pagina e solo il risultato finale è inviato.

+1

Un normale invio di un modulo reindirizzerà il browser nella nuova posizione. Così, questo non lo farebbe: recupererebbe solo i risultati del GET e poi ... chissà, a seconda della funzione di richiamata. – JAL

+0

buon punto alex, appena modificato per aggiungere la soluzione non Ajax;) ty –

17

Rimuovere l'attributo nome nei campi che non si desidera inviare al server.

<form action="abc/def.aspx" method="get"> 
    <input type="text" /> 
    <input type="text" /> 
    <input type="text" /> 
    <input type="text" /> 
    <input type="text" /> 
    <input type="hidden" name="final" /> 
    <input type="submit" value="Send" /> 
</form> 

Questo è il modo più semplice per ottenere ciò che si vuole, e funziona su tutti i principali browser.

W3 spec parla solo presentando valori della forma quando è nome attuale: http://www.w3.org/TR/html401/interact/forms.html#h-17.2

+0

Questo è difficile da invertire – pixelearth

Problemi correlati