2016-06-14 18 views
-2

したがって、HTMLの<table>要素を使用して5x5グリッドを作成しました。クリックされたときに各セルが赤くなり、そうでないときには白に戻るようにします。各セルの最初のクリックを検出しないようです。最初のクリックがトリガーされると、通常は1回のクリックで赤と白の表示が交互に切り替わりますが、最初のクリックをクリックすると応答しません。セルが2度クリックされた後の最初のクリックで応答するのはなぜですか?それまで触れていない場合は、最初のクリックで反応しません。HTMLテーブルの最初のクリックでonclick()が機能しない

HTMLスニペット:

<div class="board"> 
<table type="board"> 
<tr> 
     <td id="r1-c1" onclick="changeColor('r1-c1')"></td> 
     <td id="r1-c2" onclick="changeColor('r1-c2')"></td> 
     <td id="r1-c3" onclick="changeColor('r1-c3')"></td> 
     <td id="r1-c4" onclick="changeColor('r1-c4')"></td> 
     <td id="r1-c5" onclick="changeColor('r1-c5')"></td> 
</tr> 
... 
</table> 
</div> 
<button id="submit" onclick="submitted()">Generate</button> 

スニペットはそれぞれ、本体と2 divタグ内にネストされます。

CSSスニペット:

table[type=board],tr,td{ 
    background-color: white; 
    min-width: 80px; 
    min-height: 380px; 
    border: 2px solid black; 
    text-align: center; 
    font-size: 25px; 
    margin: 0px; 
} 

JSコード:

function changeColor(id) 
{ 
    if(document.getElementById(id).style.backgroundColor == "white"){ 
     document.getElementById(id).style.backgroundColor = "red"; 
    }else{ 
     document.getElementById(id).style.backgroundColor = "white"; 
    } 
} 
+0

をクリックされたセルを見つけるためにあなたを助ける意味と言うことはあなたを助けることはできません。 –

+0

私は初めてdocument.getElementById(id).style.backgroundColor == "white" 'が' document.getElementById(id).style.backgroundColor ===として定義されていないので、element.style.backgroundColorが設定されていないと思います。 '、それはelseに入り、背景を「白」に設定します。 ifが未定義であることをチェックし、それを赤に設定するか、条件を切り替える(if(red)white; else red;)ことでこれを回避することができます。 –

+0

初期ロードでcssを適用するかどうか確認してください。そうでない場合は、未定義のプロパティもチェックしています。 – SESN

答えて

1

は、次のコードを使用してください。それが動作します。

function changeColor(id){ 
    if((document.getElementById(id).style.backgroundColor == "white") || (document.getElementById(id).style.backgroundColor == "")){ 
     document.getElementById(id).style.backgroundColor = "red"; 
    }else{ 
     document.getElementById(id).style.backgroundColor = "white"; 
    } 

} 
+0

ありがとうございます。この非常に簡単な解決法が問題を解決しました。私が提供した限られた量のコードでそれを認識していただきありがとうございます。しかし、私は、最初のクリックの間の背景色はなぜ定義されていませんが、そのセルを最初にクリックした後ではないのでしょうか? – btrballin

+0

Uは背景色をCSSでは最初に設定していません。あなたが特定のプロパティを設定していない場合は、javascriptを呼び出すとu NULL値が返されます。 – SESN

+0

ええと...私はCSSの 'background-color'プロパティを白く設定しましたが、まだエラーがあります。 – btrballin

1

あなたはHTMLを提供していないので、DOMを作成する必要があります。

document.getElementById(id).style.backgroundColor 

各セルにIDがあるとは限りませんか?

大きなグリッドでは複雑すぎる可能性があります。代わりに、rowIndex & cellIndexを使用して、特定のセルを特定する必要があります。

eventオブジェクトも使用でき、targetが見つかります。私たちは、イベントがトリガなっているかを確認しない限り、それはevent.target

var getTable = document.getElementById("demoTable"); 
//Declare a variable to hold the cellIndex & rowIndex 
// On next click check if this values,& if not null change the background color of that cell 
var col = ""; 
var row = ""; 
getTable.addEventListener('click',function(event){ 
    console.log(col,row) 
    if(col !== "" && row !== ""){ 
    document.getElementById('demoTable').rows[row].cells[col].style.backgroundColor ="transparent" ; 
    } 
    col = event.target.cellIndex; 
    row = event.target.parentNode.rowIndex; 



//Set background of the cell on which it is clicked 

    document.getElementById('demoTable').rows[row].cells[col].style.backgroundColor ="red" ; 
    }) 

JSFIDDLE

関連する問題