2012-05-15 15 views
24

Ho un ottenuto un modulo, sul fare clic sul pulsante di invio:come scrivere codice javascript all'interno di php

  1. voglio fare qualche compito nello stesso file (operazione DB) e
  2. voglio il dati del modulo da inviare al test.php con il reindirizzamento

qui è il mio codice

<?php 
    if(isset($_POST['btn'])){ 
     //do some task 
    ?> 
    <script type="text/javascript"> 
     var e = document.getElementById('testForm'); e.action='test.php'; e.submit();</script> 
    <?php 
    } 
    ?> 
<form name="testForm" id="testForm" method="POST" > 
    <input type="submit" name="btn" value="submit" autofocus onclick="return true;"/> 
</form> 

ma non in grado di presentare la fo rm, se chiamo il codice javascript su onClick, funziona.questo è il problema in questo codice, C'è qualche problema con questo

+2

Piuttosto logico, il tuo javascript viene eseguito nel momento in cui viene emesso nel browser e il tuo modulo viene stampato ... dopo. Dovresti racchiudere il codice in un window.onload listener di eventi in modo che venga eseguito solo dopo il completamento del caricamento della pagina. – yent

risposta

45

Proprio eco il javascript fuori all'interno della funzione di se

<form name="testForm" id="testForm" method="POST" > 
    <input type="submit" name="btn" value="submit" autofocus onclick="return true;"/> 
</form> 
<?php 
    if(isset($_POST['btn'])){ 
     echo " 
      <script type=\"text/javascript\"> 
      var e = document.getElementById('testForm'); e.action='test.php'; e.submit(); 
      </script> 
     "; 
    } 
    ?> 
+1

Si noti che la soluzione qui è _non_ generare il codice JavaScript con PHP ma il fatto che il blocco PHP viene dopo i tag del modulo, il che significa che l'elemento DOM 'testForm' viene inizializzato quando viene eseguito JavaScript. – chiborg

4

Nel momento in cui lo script viene eseguito, il pulsante non esiste perché il DOM è non completamente caricato. La soluzione più semplice sarebbe quella di inserire il blocco di script dopo il modulo.

Un'altra soluzione potrebbe essere quella di acquisire l'evento window.onload o utilizzare lo jQuery library (overkill se si dispone di questo solo JavaScript).

5

Si può mettere tutti i tuoi JS come questo, in modo da non eseguire prima del tuo HTML è pronto

$(document).ready(function() { 
    // some code here 
}); 

Ricordati di questo è jQuery quindi includilo nella sezione head. Vedi anche Why you should use jQuery and not onload

Problemi correlati