2012-05-15 12 views
20

c'è un modo per inviare un modulo quando una casella è selezionata?inviare un modulo quando una casella è selezionata

<form id="formName" action="<?php echo $_SERVER['PHP_SELF'];?>" method="get"> 
    <input type ="checkbox" name="cBox[]" value = "3">3</input> 
    <input type ="checkbox" name="cBox[]" value = "4">4</input> 
    <input type ="checkbox" name="cBox[]" value = "5">5</input> 
    <input type="submit" name="submit" value="Search" /> 
</form> 

<?php 
    if(isset($_GET['submit'])){ 
     include 'displayResults.php'; 
    } 
?> 

Questo è ciò che ho attualmente, ma vorrei inviare il modulo senza un pulsante di invio, quando i controlli utente o deseleziona una casella di controllo. Qualsiasi aiuto?

risposta

40

In parole povere JavaScript In poche parole

onChange="this.form.submit()" 

nel tag form/ingresso.

+0

Wow, come così semplice !! –

+0

Come aggiungere javascript per confermare? –

12

Sì, questo è possibile.

<form id="formName" action="<?php echo $_SERVER['PHP_SELF'];?>" method="get"> 
    <input type ="checkbox" name="cBox[]" value = "3" onchange="document.getElementById('formName').submit()">3</input> 
    <input type ="checkbox" name="cBox[]" value = "4" onchange="document.getElementById('formName').submit()">4</input> 
    <input type ="checkbox" name="cBox[]" value = "5" onchange="document.getElementById('formName').submit()">5</input> 
    <input type="submit" name="submit" value="Search" /> 
</form> 

Aggiungendo onchange="document.getElementById('formName').submit()" a ciascuna casella di controllo, potrai inviare in qualsiasi momento una casella di controllo viene modificato.

Se sei OK con jQuery, è ancora più facile (e discreto):

$(document).ready(function(){ 
    $("#formname").on("change", "input:checkbox", function(){ 
     $("#formname").submit(); 
    }); 
}); 

per qualsiasi numero di caselle di controllo nel modulo, quando l'evento "cambiamento" accade, il modulo viene inviato. Funzionerà anche se crei dinamicamente più checkbox grazie al metodo .on().

+0

Ho implementato questo codice, tuttavia quando controllo la casella di controllo i risultati della ricerca non vengono visualizzati. Devo modificare il codice php? – user1394849

+0

Non ha nulla a che fare con il PHP - controlla la tua console JavaScript per assicurarti che non ci siano errori. Funziona se si fa clic su Invia? –

+0

nessun errore, ho provato entrambi i suggerimenti che mi hai dato. – user1394849

3
$(document).ready(
    function() 
    { 
     $("input:checkbox").change(
      function() 
      { 
       if($(this).is(":checked")) 
       { 
        $("#formName").submit(); 
       } 
      } 
     ) 
    } 
); 

Anche se probabilmente sarebbe meglio aggiungere classi a ciascuna delle caselle di controllo e fare

$(".checkbox_class").change(); 

in modo da poter scegliere quale caselle inviare il modulo al posto di tutti loro a farlo.

0

Sono stato in giro con questo per circa quattro ore e ho deciso di condividere questo con voi.

È possibile inviare un modulo facendo clic su una casella di controllo, ma la cosa strana è che quando si controlla l'invio in php, ci si aspetterebbe che il modulo venga impostato quando si seleziona o deseleziona la casella di controllo. Ma questo non è vero. Il modulo viene impostato solo quando in realtà seleziona la casella di controllo, se deselezionalo non verrà impostato. la parola selezionata alla fine di un tipo di casella di controllo farà sì che la casella di controllo sia selezionata, quindi se il tuo campo è selezionato dovrà riflettere come nell'esempio seguente. Quando viene deselezionato, il php aggiorna lo stato del campo che causerà la scomparsa della parola controllata.

È HTML dovrebbe apparire così:

<form method='post' action='#'> 
<input type='checkbox' name='checkbox' onChange='submit();' 
<?php if($page->checkbox_state == 1) { echo 'checked' }; ?>> 
</form> 

e il php:

if(isset($_POST['checkbox'])) { 
    // the checkbox has just been checked 
    // save the new state of the checkbox somewhere 
    $page->checkbox_state == 1; 
} else { 
    // the checkbox has just been unchecked 
    // if you have another form ont the page which uses than you should 
     make sure that is not the one thats causing the page to handle in input 
     otherwise the submission of the other form will uncheck your checkbox 
    // so this this line is optional: 
     if(!isset($_POST['submit'])) { 
      $page->checkbox_state == 0; 
     } 
} 
Problemi correlati