2011-08-26 17 views
12

Tengo una forma que yo uso en mi CMS que me gustaría añadir a la intemperie extra para guardar el formulario al pulsar teclas: la tecla "Ctrl + S"CTRL + S para presentar la forma y todas las entradas

Esto funciona para todas las entradas aparte de los botones enviar no se envían, este sencillo ejemplo muestra lo que quiero decir:

<?php 
if(isset($_POST['save'])){ 
    die('save= ' . $_POST['save']); 
} 
?> 
<!doctype html> 
<html> 
<head> 
    <meta charset="utf-8" /> 

    <title></title> 

    <style type="text/css"> 
     html { height: 100%; } 
     body { 
      color: #262626; 
      background: #f4f4f4; 
      font: normal 12px/18px Verdana, sans-serif; 
      height: 100%; 
     } 
     #container { 
      width: 760px; 
      margin: 0 auto; 
      padding: 10px 60px; 
      border: solid 1px #cbcbcb; 
      background: #fafafa; 
      -moz-box-shadow: 0px 0px 10px #cbcbcb; 
      -webkit-box-shadow: 0px 0px 10px #cbcbcb; 

      min-height: 100%; 
      height: auto !important; 
      height: 100%; 
     } 

    </style> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> 
    <script type="text/javascript"> 
    (function($){ 
     $(document).ready(function(){ 

      // Save Form 
      $(window).keypress(function(event) { 
       if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true; 
       $("#container form").submit(); 
       event.preventDefault(); 
       return false; 
      }); 

     }); 
    })(jQuery); 
    </script> 
</head> 

<body> 
    <div id="container"> 

     <form action="" method="post"> 
      <label for="">Name</label> 
      <input type="text=" name="name" value="" /> 

      <input name="save" type="submit" value="Save" /> 
      <input name="create" type="submit" value="Create" /> 

     </form> 

    </div> 
</body> 
</html> 
+0

En el CMS usa esto para determinar si es "guardar", "crear", "eliminar", etc. por lo que sí, es necesario enviar el botón de enviar. –

+0

Intenté enviar el botón de envío, pero no funcionó –

+0

@ Mr. Discaption: el valor de un botón de envío solo se incluye en la solicitud si se trata del botón de envío que se hizo clic en. – Matt

Respuesta

8

El valor de un botón submit solo se incluye en la solicitud si se trata del botón submit al que se hizo clic.

Dado que envía el formulario directamente (utilizando JS), no está haciendo clic en un botón de envío, por lo que no se ha enviado ninguno.

En lugar de llamar al .submit() en el formulario, intente llamar al .click() en el botón de envío que desea incluir.

$(window).keypress(function(event) { 
    if (!(event.which == 115 && event.ctrlKey) && !(event.which == 19)) return true; 
    $("#container form input[name=save]").click(); 
    event.preventDefault(); 
    return false; 
}); 
+0

Lo intenté pero con enviar no hacer clic. Gracias –

2

Probar:

if($("#container form :submit:first").length) 
{ 
    $("#container form :submit:first").click(); 
} 
else 
{ 
    $("#container form").submit(); 
} 

se disparará un clic en el primer presentar un botón (si está disponible)

1

El formulario no tiene ningún valor de acción establecido, y hay más de una entrada de envío.

La múltiple envía podría break .submit() pero no lo creo - creo que no tener una acción para enviar el formulario es por qué parece que no está haciendo nada.

EDITAR/CORRECCIÓN:

he aprendido un par de cosas desde la publicación de esta respuesta (gracias @JohnMagnolia), por lo que me permite corrijo:

atributos acción realmente vacíos están permitidos en HTML 4 , pero no permitido en HTML5. En la mayoría de los casos, un atributo de acción vacío hará que el formulario se envíe a la URL actual, incluyendo parámetros GET. Múltiples botones de envío no son un problema y no explica por qué el código no funcionó; consulte la respuesta de @ Matt para obtener la respuesta correcta.

+0

La respuesta de Matt se ve mejor en realidad – jammypeach

+1

Lo sentimos, pero eso es incorrecto, si un formulario tiene una acción vacía, se publicará automáticamente de nuevo. –

+0

@JohnMagnolia eso es lo que dice la especificación aunque depende del navegador (ver http://stackoverflow.com/a/1132015/846480). NB, la respuesta correcta para esta pregunta es anterior ^^ – jammypeach

Cuestiones relacionadas