2013-04-25 79 views
0

我正在制作一个井字游戏,其中我有一系列9个按钮。我根据变量isX的布尔值将背景图像更改为XO未识别JavaScript功能

我有一个div与编号stage它拥有类square的所有按钮。我在stage上添加了一个监听器,并通过了event参数。但是,功能clickHandler未被识别。 Chrome的说:

Uncaught ReferenceError: clickHandler is not defined 2Players.html:38 
(anonymous function) 

HTML:

<body> 
    <div id="stage"> 

    </div> 
</body> 

CSS:

#stage{ 
    width: 400px; 
    height: 400px; 
    padding: 0px; 
    position: relative; 
} 
.square{ 
    width: 64px; 
    height: 64px; 
    background-color: gray; 
    position: absolute; 
} 

的JavaScript:

 const ROWS = 3; 
     const COLS = 3; 
     const GAP = 10; 
     const SIZE = 64; 
     var stage = document.querySelector("#stage"); 
     var lotOfButtons = []; 

     var winningPatterns = ["123","159","147", 
           "258","357","369", 
           "456","789"]; 
     var isX = true; 
     var player1Pattern = ""; 
     var player2Pattern = ""; 

     stage.addEventHandler("click",clickHandler,false); 
     prepareBoard(); 

     function prepareBoard(){ 
      for(var row = 0;row<ROWS;row++){ 
      for(var col = 0;col < COLS;col++){ 
       var square = document.createElement("button"); 
       square.setAttribute("class","square"); 
       stage.appendChild(square); 
       lotOfButtons.push(square); 
       square.style.left = col * (SIZE+GAP) + "px"; 
       square.style.top = row * (SIZE+GAP) + "px"; 
      } 
     } 
     function clickHandler(event){ 
      if(isX===true){ 
       event.target.style.backgroundImage = "url(../img/X.PNG)"; 
       isX = false; 
      }else{ 
       event.target.style.backgroundImage = "url(../img/O.PNG)"; 
       isX = true; 
      } 
     } 
    } 
+1

抛开你的问题,你可能会受益于使用spritesheet,只是抵消背景位置,而不是交换图像。 – 2013-04-25 03:44:41

+0

@KaiQing肯定的事情,会学到:) – 2013-04-25 04:08:14

回答

4

你必须在代码中的一些语法和语义错误 - 可能比我抓到的更多,但它正在工作泰特。

  1. 你只在prepareBoard关闭嵌套循环for括号中的一个。这导致clickHandlerprepareBoard内被定义为,而不是在window
  2. 这是addEventListener,而不是addEventHandler

http://jsfiddle.net/4pgQ8/

+0

哎呀!那是......我的愚蠢。 – 2013-04-25 03:46:08