Si se envía un formulario pero no mediante un botón específico, como
- presionando Enter
- utilizando
HTMLFormElement.submit()
en JS
¿Cómo se supone que un navegador determina cuál de los múltiples botones de envío, si los hay, usar como el que se presiona?
Esto es significativo en dos niveles:
- llamar a un
onclick
controlador de eventos adjunto a un botón de envío - los datos enviados de vuelta al servidor web
Mis experimentos hasta ahora han demostrado que:
- al presionar Enter, Firefox, Opera y Safari usan el primer botón de enviar en el formulario
- Al presionar Enter, IE utiliza el primer botón de envío o ninguno, dependiendo de las condiciones que no he podido resolver
- todos estos navegadores no usan ninguno para enviar JS
¿Qué dice el estándar?
Si eso ayudara, aquí está mi código de prueba (el PHP es relevante solo para mi método de prueba, no para mi pregunta en sí)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
<h1>Get</h1>
<dl>
<?php foreach ($_GET as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?>
</dl>
<h1>Post</h1>
<dl>
<?php foreach ($_POST as $k => $v) echo "<dt>$k</dt><dd>$v</dd>"; ?>
</dl>
<form name="theForm" method="<?php echo isset($_GET['method']) ? $_GET['method'] : 'get'; ?>" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
<input type="text" name="method" />
<input type="submit" name="action" value="Button 1" onclick="alert('Button 1'); return true" />
<input type="text" name="stuff" />
<input type="submit" name="action" value="Button 2" onclick="alert('Button 2'); return true" />
<input type="button" value="submit" onclick="document.theForm.submit();" />
</form>
</body></html>