在Javascript中创建和调用事件

在Javascript中创建和调用事件,javascript,html,Javascript,Html,我正在开发一款完全用HTML和Javascript编写的“选择你自己的冒险”游戏;我想完全用Javascript创建我的大部分元素,以创建一个很棒的动态游戏!我在使用事件和事件侦听器时遇到问题。这是一个神秘的游戏;玩家从列表中选择角色后,可以邀请五位客人参加一个聚会。一个客人被杀了,留下你和三个嫌疑犯一起破案 选择玩家后,会有另一个按钮显示“选择此角色!”。单击此按钮时,将隐藏播放器创建UI,并显示一个新UI。按照现在的代码,“StartGame”函数被完全跳过。我做错了什么?您能给予的任何帮助

我正在开发一款完全用HTML和Javascript编写的“选择你自己的冒险”游戏;我想完全用Javascript创建我的大部分元素,以创建一个很棒的动态游戏!我在使用事件和事件侦听器时遇到问题。这是一个神秘的游戏;玩家从列表中选择角色后,可以邀请五位客人参加一个聚会。一个客人被杀了,留下你和三个嫌疑犯一起破案

选择玩家后,会有另一个按钮显示“选择此角色!”。单击此按钮时,将隐藏播放器创建UI,并显示一个新UI。按照现在的代码,“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()函数,其中按钮代码被排除在外。我不会在我的dropdownlist中包含用于创建选项的“charFirstNames[]”和“charLastNames[]”。为了讲一个更有趣的故事,我把他们分开;当我解决了bug和基本问题后,它们最终将成为数据库记录。我不认为我把这里搞砸了,但有可能吗?该函数由编码到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;
函数开始名(divName){
myDiv=document.getElementById('story');
lblPlayer=document.createElement('label');
lblPlayer.id='LBL_Player';
lblPlayer.htmlFor='DDL_PlayerChar';
lblPlayer.innerHTML='请选择一个字符';
myDiv.appendChild(lblPlayer);
ddlPlayer=document.createElement('select');
ddlPlayer.id='DDL_PlayerChar';
myDiv.appendChild(ddlPlayer);
defOpt=document.createElement(“选项”);
除雾值=0;
defOpt.text='选择…';
ddlPlayer.appendChild(defOpt);
//创建并附加选项
for(var i=0;i
}


welcomePlayer()函数类似于startName()函数,创建了邀请第一个“来宾”的界面并删除了播放器创建界面。

这两行都将
onclick
处理程序设置为调用
welcomePlayer
函数的结果(请参见参数?)

你可能是说

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

什么“startName”函数?
btnPlayer.addEventListener('click',welcomePlayer(),true)应该是
btnPlayer.addEventListener('click',welcomePlayer,true)不带()。当您添加括号时,函数将立即被调用,而不是等待偶数触发它。您还添加了事件2x,一次通过事件侦听器,一次通过
onclick
(这也不应该有()因为它会立即调用函数)。选择一个方法并坚持使用它。@scrapsedCola尽管我非常怀疑它,但如果
welcomePlayer
返回一个闭包,它仍在工作(代码:),那么我需要将函数创建为变量吗`var welcomePlayer=函数(){//code here}@Shortstuff81000无论哪种方式都应该是相同的。@Shortstuff81000在这里,无论您是执行
var welcomePlayer=function(){}
还是
function welcomePlayer(){}
,都没有关系。前者是一个变量赋值(仅对在它之后初始化的代码可用,并受函数作用域的约束),而后者是一个函数声明(立即定义,全局定义,对所有代码可用)。
btnPlayer.addEventListener('click', welcomePlayer, true);