Issue:
com'è noto in IE 6, 7 se si invia un form attraverso degli elementi <button>, es.
codice:
<form ...>
<button type="submit" name="action" value="action1">label button 1</button>
<button type="submit" name="action" value="action2">label button 2</button>
...
<button type="submit" name="action" value="action<n>">label button n</button>
</form>
non è possbile recuperare lato server l'attributo 'value' del bottone usato per fare il submit, ma otterremo invece l'innerHTML del pulsante stesso (ovvero "label button...")
Supponendo di non potere (o voler) sostituire i vari button con dei corrispettivi input type "submit", di usare HTML5 e di avere già a disposizione jQuery , ho modificato il form soprastante in questo modo duplicando i value e assegnandoli ad un nuovo attributo
codice:
<form ...>
<button type="submit" name="action" data-button-value="action1" value="action1">label button 1</button>
<button type="submit" name="action" data-button-value="action2" value="action2">label button 2</button>
...
<button type="submit" name="action" data-button-value="action<n>" value="action<n>">label button n</button>
</form>
e attraverso il seguente script creo dinamicamente per ciascuno dei form in pagina un campo nascosto "_form_action" che valorizzo quando clicco su uno dei pulsanti
codice:
$(document).ready(function() {
$('form').each(function() {
var f = $(this),
b = f.find('button[data-button-value]');
if (b.length > 0) {
var action = $('<input type="hidden" />').attr({
name : '_form_action',
value : ''
});
action.appendTo(f);
b.each(function() {
$(this).bind('click.setDataButtonValue', function() {
action.val($(this).attr('data-button-value'));
})
})
}
})
});
Lato server mi basta leggere la variabile "_form_action" sapendo che sarà valorizzata identicamente a prescindere dal browser (bacato o meno) che sto utilizzando
Nota1: su explorer $(elementobutton).attr('value') legge comunque l'innerHTML quindi devo per forza duplicare il value
Nota2: ho usato un'attributo data-* perché sto usando HTML5. Niente vieta di cambiarlo a proprio uso e consumo con un altro adatto al doctype della propria pagina
enjoy
-f.