2012-05-15 34 views
24

tôi có một có một hình thức, trên nhấp vào nút gửi:cách viết mã javascript bên trong php

  1. Tôi muốn làm một số nhiệm vụ trong cùng một tập tin (db nhiệm vụ) VÀ
  2. Tôi muốn dữ liệu mẫu sẽ được gửi đến test.php với chuyển hướng

đây là mã của tôi

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

nhưng không có khả năng nộp fo rm, nếu tôi gọi mã javascript trên onClick, nó hoạt động. Đó là vấn đề trong mã này, Có bất kỳ công việc nào cho việc này

+2

Khá hợp lý, javascript của bạn chạy tại thời điểm nó được xuất trong trình duyệt và biểu mẫu của bạn được in ... sau đó. Bạn nên kèm theo mã của bạn trong trình nghe sự kiện window.onload để nó chỉ được thực hiện sau khi hoàn thành tải trang. – yent

Trả lời

45

Chỉ cần echo javascript ra bên trong nếu chức năng

<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

Xin lưu ý rằng giải pháp ở đây là _not_ tạo mã JavaScript bằng PHP nhưng thực tế là khối PHP xuất hiện sau các thẻ biểu mẫu có nghĩa là phần tử DOM 'testForm' được khởi tạo khi JavaScript được thực thi. – chiborg

4

Tại thời điểm tập lệnh được thực thi, nút không tồn tại vì DOM là không được tải đầy đủ. Giải pháp đơn giản nhất là đặt khối tập lệnh sau biểu mẫu.

Một giải pháp khác là chụp sự kiện window.onload hoặc sử dụng jQuery library (quá mức cần thiết nếu bạn chỉ có một JavaScript này).

5

Bạn có thể đặt lên tất cả JS của bạn như thế này, vì vậy nó không thực hiện trước khi HTML của bạn đã sẵn sàng

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

Hãy nhớ điều này là jQuery để đưa nó vào phần đầu. Ngoài ra, hãy xem Why you should use jQuery and not onload

Các vấn đề liên quan