2016-10-26 21 views
1

このエラーに関する約30種類の記事を調べましたが、必要な答えが見つかりませんでした。AJAXコールでnullの 'innerHTML'プロパティを設定できません

私が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> 
+1

あなたのdivのidのではないcell' 'が付いているあなたのコード内でIDによってそれらを参照しているので'grid-name' – bassxzero

+0

' grid-name'接頭辞は、 'cells' divの内側にいくつかの行があります。 – Webtron

+1

document.getElementById(グリッド名)by document.getElementByClassName(グリッド名) – Fky

答えて

2

スポットの違いを::

<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; 
        ^^ 

classidではありません、としませんがここで

は、私が(コーディングのnoobishスタイルのために申し訳ありません)を使用しています私のコードですその機能名の一部にIDがあることに注意してください。

+0

この答えは十分に近いです。私は 'getElementById'を' getElementsClassName'に変更しました。助けてくれてありがとう。 – Webtron

1

変更

<div id='grid-name-$j-$i'>$currName</div> 

<div class='grid-name-$j-$i'>$currName</div> 

下記のHTMLコードをあなたは

document.getElementById(gridname).innerHTML = this.responseText; 
関連する問題