Issue:
com'è noto in IE 6, 7 se si invia un form attraverso degli elementi <button>, es.
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...")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>
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
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 pulsanticodice:<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>
Lato server mi basta leggere la variabile "_form_action" sapendo che sarà valorizzata identicamente a prescindere dal browser (bacato o meno) che sto utilizzandocodice:$(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')); }) }) } }) });
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.

Rispondi quotando
