2011-08-26 20 views
12

Ho una forma che uso nel mio CMS che vorrei aggiungere allo scoperto in più per salvare il modulo su pressione dei tasti: "Ctrl + S"CTRL + S per presentare il modulo e tutti gli ingressi

Questo funziona per tutti gli ingressi a parte i pulsanti presentare non vengono inviati, questo semplice esempio mostra cosa intendo:

<?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

Nel CMS utilizza questo per capire se è "salva", "crea", "elimina" ecc. Quindi sì è necessario inviare il pulsante di invio. –

+0

Ho provato a inviare il pulsante di invio ma non ha funzionato –

+0

@ Mr.Disappointment: il valore di un pulsante di invio è incluso nella richiesta solo se è stato premuto il pulsante di invio. – Matt

risposta

8

Il valore di un pulsante submit è incluso nella richiesta solo se è il pulsante submit su cui è stato fatto clic.

Poiché si invia il modulo direttamente (tramite JS), non si fa clic su un pulsante di invio, quindi nessuno è stato inviato.

Invece di chiamare .submit() nel modulo, provare a chiamare .click() sul pulsante di invio che si desidera includere.

$(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

Ho provato questo ma con invio non fare clic. Grazie –

2

Prova:

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

Si attiverà un clic sulla prima presentare pulsante (se disponibile)

1

La forma non ha alcun valore impostato azione, e ci sono più di presentare ingressi.

Il numero di sottomissione potrebbe essere break .submit() ma non penso - penso che non avere un'azione per inviare il modulo sia perché sembra che non stia facendo nulla.

EDIT/CORREZIONE:

ho imparato un paio di cose dal momento che questo distacco risposta (grazie @JohnMagnolia), quindi mi permette di correggo:

attributi azione realtà vuote sono ammessi in HTML 4 , ma non consentito in HTML5. Nella maggior parte dei casi, un attributo di azione vuoto farà sì che il modulo venga inviato all'URL corrente, compresi i parametri GET. I pulsanti di invio multipli non sono un problema e non perché il codice non ha funzionato, vedi la risposta di @ Matt per la risposta corretta.

+0

La risposta di Matt sembra migliore in realtà – jammypeach

+1

Scusa ma non è corretto, se un modulo ha un'azione vuota verrà automaticamente postato su se stesso. –

+0

@JohnMagnolia è ciò che dice la specifica anche se dipende dal browser (vedi http://stackoverflow.com/a/1132015/846480). NB, la risposta corretta per questa domanda è al di sopra ^^ – jammypeach

Problemi correlati