2009-12-08 139 views
0

我試圖創建一個基本的Hangman程序。它是一個被分配到對象數組中的標籤數組(稱爲按鈕)。每個圖像都是一個字母的圖像,例如,您可以按'L'按鈕,它會檢查這是否在WordArray(這是一個字符數組)中,然後它會採取相應的行動(隱藏字母,然後更新絞架圖像,如果需要的話)。從Javascript對象(Javascript)中訪問函數

我無法獲取圖像的onclick方法來訪問checkinarray函數。我究竟做錯了什麼?

var LetterAmount = 3; //make this 26. checked. 
var WordArray = new Array(); 
var Buttons = new Array(); 

function checkinarray(num){ 
var z = 0; 
while (z<4){ 
    document.write("looping through word now"); 
    if (num == WordArray[z]){ 
    document.write("<br/>it is in the word"); 
    } 
    z++; 
    } 
} 

function ButtonClicked(){ 
this.Image.src = "images/blank.jpg"; 
checkinarray(this.Number); 
} 
function Button(Image, Number) { 
this.Image = Image; 
this.Number = Number; 
this.ButtonClicked = ButtonClicked; 
} 
function initialiseletters(){ 
var x; 
//set up empty img tags for use 
    for(i = 0; i < LetterAmount; i++) { 
    document.write("<img id=" + i + ">"); 
    } 
    for(x = 0; x < LetterAmount; x++) { 
    document.images[x].src = "images/" + x + ".jpg"; 
    document.getElementById(x).onclick =function(){ 
    Buttons[this.id].ButtonClicked(); 
    } 
Buttons[x] = new Button(document.images[x], "" + x); 
} 
} 

function initialiseword(){ 
//WordArray = new Array(); 
WordArray[0] = 0; 
WordArray[1] = 1; 
WordArray[2] = 2; 
WordArray[3] = 3; 
} 

function initialise(){ 
initialiseword(); 
initialiseletters(); 
document.write("testing overall"); 
} 

回答

0
document.getElementById(x).onclick =function(){ 
    Buttons[this.id].ButtonClicked(); 
    } 

是你的問題所在。 'this.id'是未定義的。

document.write不是將元素添加到DOM的好方法...嘗試document.createElement('img');

那麼你已經有了參照圖像,像這樣:

var img = document.createElement('img'); 
img.onclick = function() 
{ 
    //your click... 
} 
//add it to the view stack 
document.body.appendChild(img); 
1

,我沒有看到有ButtonClicked調用checkinarray一個問題,但我看到一個問題,checkinarray - 它調用document.write的頁面渲染完成後(例如,當用戶點擊),從而贏得沒有工作。您需要通過DOM方法修改DOM(如果您使用Prototype,jQuery,MooTools,Dojo,Closure庫,YUI等工具包,這將變得更容易)。

+0

感謝響應快! 這是一門課程,他們指定我們不能使用任何工具包或擴展,但是。 – David2334 2009-12-08 17:35:58

+0

然後,你被「原始」DOM方法卡住了:'Document#createElement','Node#appendChild'等,加上有用的,非常廣泛支持的和非標準的Element#innerHTML屬性(因爲在頁面被渲染後,你再也不能使用'document.write')。請參閱w3c規範; w3schools(http://www.w3schools.com/)有一些有用的參考和教程。 – 2009-12-08 18:59:00