没有获得点击名称的ID

时间:2017-11-11 08:56:18

标签: javascript php jquery mysql

我有一个jquery代码,用于获取保存在mysql中的用户名。

<script>  
var currentID = null;
function fetch_data() {
  $.ajax({
    url: "select.php",
    method: "POST",
    success: function(data) {
      $('#live_data').html(data);
      //fetch_chat();
    }
  });
}

$(document).ready(function() {
 fetch_data();
 $(document).on('click', '.first_name', function() {
    currentID = $(this).data("id1");
    alert(currentID);
  });
});         
</script>

并且select.php看起来像这样:

<?php 
 session_start();
require("config.php");
 $output = '';  
 $sql = "SELECT * FROM users  where name!='$_SESSION[name]'";  
 $result = mysqli_query($con, $sql);  
 $output .= '  
      <div class="table-responsive">  
           <table class="table table-bordered">  
                <tr>  

                     <th width="40%">First Name</th>  

                </tr>';  
 if(mysqli_num_rows($result) > 0)  
 {  
      while($row = mysqli_fetch_array($result))  
      {  
           $output .= '  
                <tr>  

                     <td class="first_name" data-id1="'.$row['id'].'">'.$row["name"].'</td>  

                </tr>  
           ';  
      }  

 }  
 else  
 {  
      $output .= '<tr>  
                          <td colspan="4">Data not Found</td>  
                     </tr>';  
 }  
 $output .= '</table>  
      </div>';  
 echo $output;  
 ?>

问题在于我没有为点击的用户提供身份证明。代码是从表中获取数据,当点击任何名称时,它应该提醒他们各自的id。

1 个答案:

答案 0 :(得分:0)

抱歉,我忘了$(document).on()应该适用于动态元素。帖子的末尾附有旧答案。

请检查浏览器中的元素是否从服务器正确获取$row['id']。或者您可以修改代码,以便<td>显示$row['id']而不是$row['name'],以查看是否正确获取了id。有可能id字段在数据库中没有被命名为id - 部分原因SELECT *查询不好(自动完成和SQL错误赢了&t; t如果我们列出了错误的字段,请帮助我们!)。

如果它被正确获取但处理程序似乎无法正常工作,那么this answer可能会有所帮助。

旧答案

<击> 对于quickfix,您应该将click处理程序块放在ajax调用的success:回调中,即:

success: function(data) {
    $('#live_data').html(data);
    $(document).on('click', '.first_name', function() {
        currentID = $(this).data("id1");
        alert(currentID);
    });
}

可能原因是fetch_data()是ajax调用。

所以在填充$('#live_data')之前(在ajax调用成功之后),您已经告诉文档附加了点击处理程序。 <td>尚未出现!

但是,您可能不希望fetch_data()与点击处理程序添加功能结合使用。在这种情况下,您可能需要附加then()并在fetch_data()函数中返回Promise。

希望这些链接有所帮助: