Tengo un formulario en una página HTML con varios botones de envío que realizan diferentes acciones. Sin embargo, cuando el usuario escribe un valor en una entrada de texto y pulsa ingresar, los navegadores generalmente actúan como si el siguiente botón de envío se activase secuencialmente. Quiero una acción particular que se produzca, por lo que una solución que encontré fue poner en invisibles botones de envío en el código HTML directamente después de las entradas de texto en cuestión, así:Usar Javascript para cambiar qué envío está activado al introducir la tecla, presione
<input type="text" name="something" value="blah"/>
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
Esto funciona como un encanto en la mayoría de los navegadores, excepto que no lo hace en navegadores web como Safari y Chrome. Por alguna razón, omiten el botón de envío invisible. He estado tratando de descubrir cómo interceptar la tecla Enter presionar y activar el envío correcto usando Javascript, pero no he podido hacer que funcione. Interceptar la clave y establecer el foco en el envío correcto no funciona.
¿Hay alguna forma de usar Javascript o de otro modo para seleccionar qué botón de envío se usará cuando el usuario presione la tecla Intro en una entrada de texto en un formulario HTML?
Editar: Para aclarar, el formulario no puede requerir Javascript para "funcionar" fundamentalmente. No me importa si el envío de la clave de entrada no es deseable sin Javascript en los navegadores webkit, pero no puedo eliminar ni cambiar el orden de los botones de envío.
Esto es lo que probé, no cambia el comportamiento de envío en los navegadores webkit.
Lo que funcionó es cambiar el foco () en el siguiente código a clic().
document.onkeypress = processKey;
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click(); // previously: focus()
}
}
EDIT: Solución final:
Funciona con todos los navegadores y sólo se intercepta la tecla enter cuando sea necesario:
HTML:
<input type="text" name="something" value="blah"
onkeydown="return processKey(event)" />
<input type=submit name="desired" value="Save Earth" style="display: none"/>
...
<input type=submit name="something_else" value="Destroy Earth" />
...
<input id="foobar" type=submit name="desired" value="Save Earth" />
Javascript:
function processKey(e)
{
if (null == e)
e = window.event ;
if (e.keyCode == 13) {
document.getElementById("foobar").click();
return false;
}
}
prueba mi ejemplo a continuación. use e.which en lugar de e.keycode – Tester101