javascript - 无法在 AJAX 调用中设置 null 的属性 'innerHTML'

标签 javascript php html ajax

我已经浏览了大约 30 篇关于此站点上此错误的不同文章,但没有找到我需要的答案。

当我在我创建的 div 表中单击一个单元格时,我收到了可怕的 Cannot set property 'innerHTML' of null 消息。我检查了页面加载的顺序,以确保 JS 位于 html 标签下方。 我认为这可能与在 getElementById 语法中使用变量名有关。

这是我正在使用的代码(抱歉我的编码风格很笨):

<HTML>
</HEAD>
<BODY>
<table border=1>
<tr><td colspan="11"><center><h2>Away Team</h2></center></td></tr>
        <?php 
        $ROWMAX=3;
        $COLMAX=3;
        //Rows = j
        for($j=-1;$j<=$ROWMAX-1;$j++){
            echo "<tr>";
            //Columns = i
            for($i=-1;$i<=$COLMAX-1;$i++) { 
                if($i == -1 && $j == -1){
                    echo "<th class='header-cols'></th>"; }
                elseif($i == -1 && $j >= 0){
                    echo "<th class='header-rows'><h1>$j</h1></th>";
                }
                elseif($j<0){
                    echo "<th class='header-cols'><h1>$i</h1></th>";
                }
                else {
                    $sql = "SELECT name FROM picks WHERE col=$i AND row=$j LIMIT 1";
                    $data = $conn->query($sql);
                    while($rows=$data->fetch_assoc()){
                        $currName = $rows['name'];
                        $cellStatus = $rows['status'];
                    }
                    echo "<td class='grid-cells'>
                            <div id='cell-$j-$i' class='$cellStatus' onclick='setCoords($j,$i);'>
                                <div class='grid-num'>" . (($i+1)+($j*$COLMAX)) . "</div>
                                <div class='grid-name-$j-$i'>$currName</div>
                            </div>
                        </td>";
                    $currName="";
                } 
            }
            echo "</tr>";
        } ?>
</table>
<form method="post" onSubmit="setSquare()">
        <div>
          <h3>Submit Your Picks:</h3>
          <label for="name" class="ui-hidden-accessible">Name:</label>
          <input type="text" name="name" id="nameid" placeholder="Name"><br />
          <label for="email" class="ui-hidden-accessible">Email:</label>
          <input type="text" name="email" id="emailid" placeholder="Email"><br />
          <input type="submit" data-inline="true" id='submitbtn' class='btndisabled' value="Make Picks" disabled>
          <div id='row-div'></div>
          <div id='col-div'></div>
        </div>
</form><SCRIPT>

function setCoords(row_coords, col_coords){
    var txt_name = document.getElementById("nameid").value;
    var txt_email = document.getElementById("emailid").value;
    if (txt_name != "" && txt_email != ""){ 
        document.getElementById("cell-"+row_coords+"-"+col_coords).className = "picked";
        setSquare(row_coords, col_coords);
        document.getElementById("submitbtn").className = "btnenabled";
    }
    else
    { alert("Please fill in your name and email before making a pick"); }
}

function setSquare(row,col)
{
    //get id vales from form
    var name_id = document.getElementById("nameid").value;
    var email_id = document.getElementById("emailid").value;
    var row_id = row;
    var col_id = col;
    var gridname = "grid-name-"+row+"-"+col;
    //run the ajax code here
    if(name_id != ""){
        if(window.XMLHttpRequest){
            xmlhttp = new XMLHttpRequest();
        } else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if(this.readyState == 4 && this.status == 200) {
                document.getElementById(gridname).innerHTML = this.responseText;
                //alert("grid-name-"+row_id+"-"+col_id);
                //alert(this.responseText);
            }
        };
        xmlhttp.open("POST","save-square.php?name="+name_id+"&email="+email_id+"&row="+row_id+"&col="+col_id,true);
        xmlhttp.send();
    }
}
</SCRIPT>
</BODY>
</HTML>

最佳答案

找出不同点:

<div id='cell-$j-$i' class='$cellStatus' onclick='setCoords($j,$i);'>
     ^^
     <div class='grid-name-$j-$i'>$currName</div>';
          ^^^^^

var gridname = "grid-name-"+row+"-"+col;
document.getElementById(gridname).innerHTML = this.responseText;
                     ^^

class不是 id,并且不会被 getElementById() 找到 - 注意ID 该函数名称的一部分。

关于javascript - 无法在 AJAX 调用中设置 null 的属性 'innerHTML',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266052/

相关文章:

javascript - 如何使 Canvas 保持焦点

javascript - 如何编写正则表达式来将 XML 节点与大型文本流中的特定文本进行匹配

Javascript::使用 querySelector 选择兄弟对象

php - ZendFramework 2.0.0beta4 服务管理器配置-子键区别

php - mysql 根据 LEAST 值返回正确的链接

php - 在原页面返回结果

javascript - 在 iOS8 中使用 FileReader 最安全的方法是什么?

CSS 类规范未用于 html5 中的图标按钮

javascript - 构造函数有多个参数?

javascript - 隐藏元素以供稍后显示 - 浏览器如何更新屏幕?