2010-10-20 11 views
6

In pratica è ciò che dice il titolo .. Ho un modulo con un controllo di selezione che voglio forzare il modulo a postback su se stesso al cambiamento.PHP: in cambio di selezione, modulo di posta su auto

$bmsclientlist = $clientobj->getBMSClientList(); 

echo '<form name="changebmsid" method="post" action="' . $_SERVER['PHP_SELF'] . '"><select name="bmsid">'; 

foreach($bmsclientlist as $bmsclient) { 
    $var = ''; 
    if($client['bmsid'] == $bmsclient['id']) { 
     $var = ' selected="selected"'; 
    } 
    echo '<option value="' . $bmsclient['id'] .'"'. $var .'>' .$bmsclient['clientname'] . '</option>'; 
} 

echo '</select></form>'; 

$backupobj = new AdminBackup(); 

if(isset($_POST['bmsid']){ 
    $statusarray = $backupobj->getStatusTotalsbyId($_POST['bmsid']); 
}else{ 
    $statusarray = $backupobj->getStatusTotals(); 
} 

So che coinvolgerà qualche javascript ma non sono sicuro di come ottenere ciò.

Qualsiasi aiuto più apprezzato!

Grazie,

Jonesy

risposta

12

Questo è un <select> che presenterà il form padre

<form method="post" action="#" name="myform"> 
    <select name="x" onchange="myform.submit();"> 
     <option value="y">y</option> 
     <option value="z">z</option> 
    </select> 
</form> 

Tutto quello che dovete fare è dare un nome al <form> e aggiungere l'evento onchange per your <select> ...


Adam ha ragione. Mentre l'esempio precedente funziona perfettamente, lo farei in questo modo:

utilizzando jQuery ma ci sono molte altre opzioni disponibili ...

<head> 
<script type="text/javascript" src="jquery.js"></script> 
<script> 
    $(document).ready(function(){ 
     $('#mySelect').change(function(){ 
      myform.submit(); 
     }); 
    }); 
</script> 
</head> 

e la forma

<body> 
<form method="post" action="" name="myform"> 
    <select name="x" id="mySelect"> 
     <option value="y">y</option> 
     <option value="z">z</option> 
    </select> 
</form> 
</body> 
+2

Nota che, sebbene questo sia il modo principale per farlo, non è un codice semantico: l'onchange deve essere astratto rispetto al documento o uno script esterno utilizzando un evento dom load come jquery '$ (document) .ready' –

+0

Bel esempio semplice di js non invadente. –

+0

Nel tuo esempio, qual è il vantaggio di usare jQuery? @adam, saresti in grado di modificare la risposta di andre per riflettere i tuoi suggerimenti? Sono curioso di come farlo meglio. –

7

una soluzione rapida è questo:

Aggiungere un attributo onchange alla lista di selezione

<select name="bmsid" onchange="javascript: form.submit();"> 
2

modificare il menu di selezione per questo:

<select name="bmsid" onchange="document.forms['changebmsid'].submit()"> 

Aggiornamento

Ecco un altro possibile approccio:

<script type="text/javascript"> 
    window.onload = function() { 
     document.forms['myform'].addEventListener('change', function() { 
      this.submit(); 
     }, true); 
    }; 
</script> 

Metti che qualsiasi punto della pagina, e si può lasciare si forma così com'è.

Problemi correlati