2015-11-01 77 views
3

我有一个div通过ajax请求填充。 在div内是一种完成时应该使用相同类型的ajax请求来填充更多的div的形式。我用同样的方法来创建既但第二JavaScript不运行:阿贾克斯没有射击由阿贾克斯人口填充

第一个(工作):

<div class="content_text" id="searchbysurname"> 
      <p><form name="searchbysurname"> 
      <b>Search by Surname: </b><input class="inline" type="text" name="q"> 
      <input type="submit"></form> 
      <script> 
    $('#searchbysurname form').submit(function(){ 
      var data=$(this).serialize(); 
      // post data 
      $.post('searchbysurname_test.php', data , function(returnData){ 
         $('#resultstable').html(returnData) 
      }) 

      return false; // stops browser from doing default submit process 
    }); 
     </script> 
      <div id="resultstable"></div> 

第二个(这是在resultstable DIV),这并不工作:

<? require_once("dbcontroller.php"); 
$db_handle = new DBController(); 

$q = ($_POST['q']); 
$employees=array(); 
$sql = "SELECT employees.employeeid, employees.firstname, employees.surname FROM employees where UCASE(employees.surname) LIKE UCASE('%".$q."%')"; 
$employees = $db_handle->runQuery($sql); ?> 
<table class="invisible"> 
<? 
      if(isset($employees) && !empty($employees)){ 
      foreach($employees as $k=>$v) { 
     ?> 
    <tr><td><?php echo $employees[$k]["firstname"]; ?> <?php echo $employees[$k]["surname"]; ?> </td> 
    <td><div id="viewemployeedetails<? echo $employees[$k]["employeeid"]?>"> 
     <form> 
      <input type="hidden" name="id" value="<? echo $employees[$k]["employeeid"]?>"> 
      <input type="submit" value="View"> 
     </form> 
    </div></td> 

     <div id="mainpart"><b></b></div> 
      <script> 
    $('viewemployeedetails<? echo $employees[$k]["employeeid"]?> form').submit(function(){ 
      var data=$(this).serialize(); 
      // post data 
      $.post('viewemployeedetails.php', data , function(returnData){ 
         $('#mainpart').html(returnData) 
      }) 

      return false; // stops browser from doing default submit process 
    }); 
     </script> 
+0

你缺少一个**#**在你的选择。 –

回答

0

我知道这是不相关的问题,但你不应该使用PHP短标记符号,它已被弃用:https://softwareengineering.stackexchange.com/questions/151661/is-it-bad-practice-to-use-tag-in-php

你第一块代码是带内联Javascript的HTML,这是一种非常糟糕的做事方式,如果你坚持以这种方式使用Javascript,你将很难调试错误。你应该把你的Javascript放在与HTML不同的文件中,并在最后的body标签之前包含它。理想情况下,您应该使用window.onload(或者其他类似的方法,例如闭包或jQuery的.ready()方法)来确保在DOM完全加载后才会分析脚本的DOM遍历元素。

您的第二个Javascript代码块永远不会运行,因为它在浏览器解析HTML时不存在。它只是稍后注入,但JavaScript不能这样工作。你可以动态注入JavaScript,但不是那样。你将不得不做这样的事情:

var headID = document.getElementsByTagName("head")[0];   
var newScript = document.createElement('script'); 
newScript.type = 'text/javascript'; 
newScript.src = 'http://www.somedomain.com/somescript.js'; 
headID.appendChild(newScript); 

我在这里把这个代码:http://www.hunlock.com/blogs/Howto_Dynamically_Insert_Javascript_And_CSS

+0

所以我会把var headid等放在第二部分的顶部?我最终把JavaScript放在了原来不工作的地方,因为它试图绑定到尚未创建的元素。 –

+0

不,您将不得不将第二部分的JavaScript去掉,放入它自己的文件中,然后在您拉动动态内容之后将片段添加到第一部分。即在$('#resultstable')。html(returnData)之后 – geoidesic