【问题标题】:document.getElementById in a loop return null循环中的 document.getElementById 返回 null
【发布时间】:2019-03-04 21:14:51
【问题描述】:

我使用 PHP 和 Javascript 我的第一页是appel.php

在其中,我使用 php 在以下位置创建了一个表:constructAppel.inc.php 使用我的数据库中的数据。

foreach ($rows as $row):
  $count = $count +1;
    echo "<tr>";
    echo "<td><button Onclick=ClickPresence('bt".$row['Id']."') id='bt".$row['Id']."' style='background-color:green;'>Oui</button></td>";
    echo "<td>" . $row['Nom'] . "</td>";
    echo "<td>" . $row['Prenom'] . "</td>";
    echo "<td>" . $row['Cat'] . "</td>";
    echo "<td><button onclick=window.location.href='vueparticipant.php?id=".$row['Id']."' id=". $row['Id'] ." class='material-icons'>assignment_ind</button></td>";
    echo "</tr>";
endforeach;
echo "</table>"

我想用 javascript(或者其他东西)更改按钮的背景颜色

PHP:

 $stmt = $db->prepare("SELECT * FROM dataappel WHERE Acti = '$ActiActu' AND Dat = '$Dat' AND Prof = '$Prof' AND Etab = '$Etab'");
  $stmt->execute();
  $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
  $count = $stmt->rowCount();
  if ($count > 0) {
    $list = '';
    foreach ($rows as $r) {
      $list .= "bt".$r['IdEleve'].",".$r['Appel']."/";
    }

我的列表类似于:bt55,Yes/bt45,No/bt21,Yes。

如果逗号后的值 = Yes 则 bt55 的背景为绿色

这是我的脚本:

var list = '<?php echo $list; ?>'
    if (list != '') {
      ActuPresence(list);
    }

    function ActuPresence(list){
var list = '<?php echo $list; ?>'
  var a = list.split("/");

  for (var i = 0; i < a.length-1; i++) {
    var b = a[i].split(",");
    var btn = b[0];
    console.log(document.getElementById(btn)) ;  

    if (b[1] = "No"){
      console.log(btn);
      btn.style.backgroundColor = "red";
      console.log("No");
    }
        if (b[1] = "Yes"){
      btn.style.backgroundColor =  "green";
      console.log("Yes");
    }

但是 document.getElementById(btn) 返回 null。

Var a、var b 和 var btn 返回良好的值。 我知道 bt55 存在,因为当我点击它时,console.log 返回好的 id。

【问题讨论】:

  • 您当时是否验证了btn 的值?你真的有一个带有id="..."标签的元素吗?
  • &lt;td&gt;&lt;button onclick=window.location.href='vueparticipant.php?id=17' id=17 class='material-icons'&gt;assignment_ind&lt;/button&gt;&lt;/td&gt; 对我来说似乎不是有效的 HTML - 检查您的连接和引号(并在您的问题中发布生成的 HTML)。
  • 做我想做的,没问题在这个按钮上。
  • btn 在此时返回 null。我试图把它放在别的地方,但什么也没有。我正在尝试使用 window.onload

标签: javascript php loops getelementbyid


【解决方案1】:

首先从按钮中删除 onClick 并为其添加类

echo "<td><button id='bt".$row['Id']."' style='background-color:green;' class='classname'>Oui</button></td>";

然后使用window.onload

window.onload=function(){
var classname = document.getElementsByClassName("classname");
className[0].addEventListener("click",function(){
    var list = '<?php echo $list; ?>'
    if (list != '') {
      ActuPresence(list);
    }
});
 function ActuPresence(list){
var list = '<?php echo $list; ?>'
var a = list.split("/");
for (var i = 0; i < a.length-1; i++) {
var b = a[i].split(",");
var btn = b[0];
console.log(document.getElementById(btn)) ;  
if (b[1] = "No"){
  console.log(btn);
  btn.style.backgroundColor = "red";
  console.log("No");
 }
    if (b[1] = "Yes"){
  btn.style.backgroundColor =  "green";
  console.log("Yes");
 }

您的代码中的问题是您在页面准备好之前调用了 ID,因此在执行时它为空

【讨论】:

  • 我得到:未捕获的 ReferenceError:className 未在 window.onload 中定义。我是不是放错地方了?
  • OnClick=ClickPresence 和 ActuPresence 函数不是一回事...当我单击 ClickPresence 时会更改背景颜色,ActuPresence 会使用数据库中的信息初始化颜色
  • 你能解释一下吗:window.onload=function(){ var classname = document.getElementsByClassName("classname"); className[0].addEventListener("click",function(){
  • 加载给定资源时触发加载事件在这里,在您的页面加载后,该功能必须起作用,并且 addEventListener 是将单击事件添加到您的按钮,我想您必须尝试右键单击该页面并选择查看页面源以检查有关您的类和 id 的所有内容是否可以检查您的 php 是否从服务器返回您想要的确切页面
  • 对不起,你必须使用带小 n 的类名
猜你喜欢
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 2015-02-02
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
相关资源
最近更新 更多