2016-02-08 39 views
4

我正在选择完全用HTML和Javascript编写的冒险游戏;我想完全用Javascript创建大部分元素来创建一个真棒动态游戏!我无法使用事件和事件侦听器。这是一个神秘的游戏;玩家从列表中选择角色后,可邀请5位嘉宾参加派对。其中一名客人遇难,让您与三名嫌疑人解开谜团。在Javascript中创建和调用事件

当您选择了播放器之后,还有另一个按钮“选择此字符!”。点击此按钮时,播放器创建用户界面应被隐藏,并且可以看到新的用户界面。使用现在的代码,“StartGame”函数完全被跳过。我究竟做错了什么?你可以给任何帮助将是非常真棒,非常感谢!

btnPlayer = document.createElement('button'); 
btnPlayer.id = 'BTN_btnPlayer'; 
btnPlayer.type = 'button'; 
btnPlayer.addEventListener('click', welcomePlayer(), true); 
btnPlayer.onclick = welcomePlayer(); 
btnPlayer.innerHTML = 'Select This Character!'; 
myDiv.appendChild(btnPlayer); 

编辑 我修改按钮事件属性看起来像这样:

btnPlayer.addEventListener('click', welcomePlayer, true); 
//btnPlayer.onclick = welcomePlayer; 

一个被注释掉了,因为他们都没有工作。我也试着清理我的缓存。这里是我的StartGame()函数,排除了按钮代码。我将不包含用于在我的下拉列表中创建选项的“charFirstNames []”和“charLastNames []”。我把他们分开,以便讲一个更有趣的故事;他们最终会在我得到错误和基本知识后得到数据库记录。我不认为我在这里搞砸了什么,但是我有可能做到了吗?该功能由编码到HTML中的唯一按钮调用。

function startGame(divName) { 
myDiv = document.getElementById('story'); 

lblPlayer = document.createElement('label'); 
lblPlayer.id = 'LBL_Player'; 
lblPlayer.htmlFor = 'DDL_PlayerChar'; 
lblPlayer.innerHTML = 'Please select a character. '; 
myDiv.appendChild(lblPlayer); 

ddlPlayer = document.createElement('select'); 
ddlPlayer.id = 'DDL_PlayerChar'; 
myDiv.appendChild(ddlPlayer); 

defOpt = document.createElement("option"); 
defOpt.value = 0; 
defOpt.text = 'Select...'; 
ddlPlayer.appendChild(defOpt); 

//Create and append the options 
for (var i = 0; i < charFirstNames.length; i++) { 
    var option = document.createElement("option"); 
    option.value = charFirstNames[i]+'_'+charLastNames[i]; 
    option.text = charFirstNames[i]+' '+charLastNames[i]; 
    ddlPlayer.appendChild(option); 
} 

document.getElementById('BTN_Start').hidden = true; 

}

的welcomePlayer()函数类似于startgame()函数,创建界面邀请的第一个 “客人”,并删除玩家创建UI。

+0

什么 “StartGame” 功能? – andrew

+0

'btnPlayer.addEventListener('click',welcomePlayer(),true);'应该是'btnPlayer.addEventListener('click',welcomePlayer,true);'不带()。当你添加圆括号时,函数会立即被唤起,而不是等待t甚至触发它。您还将通过事件监听器添加事件2x,并通过“onclick”(一次不会再有()函数立即调用该函数)添加一次。选择一种方法并坚持下去。 – scrappedcola

+0

@scrappedcola虽然我高度怀疑它,如果'welcomePlayer'返回一个闭包它仍然工作代码:) – Tyblitz

回答

5

这两行都将onclick句柄设置为调用welcomePlayer函数的结果(请参阅parens?)。

btnPlayer.addEventListener('click', welcomePlayer(), true); 
btnPlayer.onclick = welcomePlayer(); 

你大概的意思

btnPlayer.addEventListener('click', welcomePlayer, true); 
+0

所以我需要创建一个变量函数? 'var welcomePlayer = function(){// code here}; – Shortstuff81000

+0

@ Shortstuff81000它应该以同样的方式工作。 – dtanders

+2

@ Shortstuff81000这里无论你做'var welcomePlayer = function(){}'或'function welcomePlayer(){}'都没关系。前者是一个*变量赋值*(仅适用于在其之后初始化的代码,并且受*函数范围*的限制),而后者是*函数声明*(立即定义,全局且可用于所有代码)。 – Tyblitz