简体   繁体   English

JavaScript中的事件点击未触发功能

[英]Function is not being triggered on event click in JavaScript

This is a followup to my previous question "Creating and Calling Events in Javascript" . 这是我之前的问题“用Javascript创建和调用事件”的后续操作。 I have created a button using pure JS and assigned an event ( welcomePlayer ) and an event handler to it. 我已经使用纯JS创建了一个按钮,并welcomePlayer分配了一个事件( welcomePlayer )和一个事件处理程序。 Unfortunately, nothing happens when I click on btnPlayer . 不幸的是,当我单击btnPlayer时没有任何btnPlayer Is there something in the startGame function that's messing with the button's behavior, or am I missing something simple? startGame函数中是否有某些东西与按钮的行为startGame了,还是我错过了一些简单的东西?

<div id="story"></div>
<button type="button" id="BTN_Start" onclick="startGame('story');">Start Game</button>

function startGame(divName) {
    //The UI
    //The story div
    var myDiv = '';
    //Create and append player label
    var lblPlayer = '';
    //Create and append select list
    var ddlPlayer = '';
    //Create the default, invalid choice
    var defOpt = '';
    //Create the "Choose this character" button
    var btnPlayer = '';
    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);
    }

    btnPlayer = document.createElement('button');
    btnPlayer.id = 'BTN_Player';
    btnPlayer.type = 'button';
    btnPlayer.onclick = welcomePlayer;
    btnPlayer.innerHTML = 'Select This Character!';
    myDiv.appendChild(btnPlayer);

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

function welcomePlayer() {
    var myDiv = '';
    var lbl1stGuest = '';
    var ddl1stGuest = '';
    var btn1stGuest = '';

    //Use the selected index of the player dropdown list to assign title, first name, and last name to a new character object called Player
    if (ddlPlayer.options[ddlPlayer.selectedIndex].value != '0') {
        objPlayer = new Character();
        objPlayer.Title = charTitles[ddlPlayer.options[ddlPlayer.selectedIndex].text];
        objPlayer.FirstName = charFirstNames[ddlPlayer.options[ddlPlayer.selectedIndex].text];
        objPlayer.LastName = charLastNames[ddlPlayer.options[ddlPlayer.selectedIndex].text];
        objPlayer.IsPlayer = true;
    }
    //Find the div again to "invite" the first guest and remove player creation UI
    myDiv = document.getElementById('story');
    //Test the Player object
    //myDiv.innerHTML = '<p>Hello, ' + objPlayer.Title + ' ' + objPlayer.LastName + '!';

    //Remove the player creation UI
    lblPlayer.hidden = true;
    ddlPlayer.hidden = true;
    btnPlayer.hidden = true;

    lbl1stGuest = document.createElement('label');
    lbl1stGuest.id = 'LBL_1stGuest';
    lbl1stGuest.htmlFor = 'DDL_1stGuest';
    lbl1stGuest.innerHTML = 'Who would you like to invite first?';
    myDiv.appendChild(lbl1stGuest);

    ddl1stGuest = document.createElement('select');
    ddl1stGuest.id = 'DDL_1stGuest';
    myDiv.appendChild(ddl1stGuest);

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

    //Create and append the options
    for (var i = 0; i < charFirstNames.length; i++) {
        var guestList = [];
        guestList.push(charFirstNames[i]);
        if (objPlayer.FirstName === guestList[i]) {
            guestList.splice(i);
        }

        for (var j = 0; j < guestList.length; j++) {
            for (var k = guestList[j]; k = charFirstNames[j]; k++) {
                var option = document.createElement("option");
                option.value = charFirstNames[i] + '_' + charLastNames[i];
                option.text = charFirstNames[i] + ' ' + charLastNames[i];
                ddl1stGuest.appendChild(option);
            }
        }
    }

    btn1stGuest = document.createElement('button');
    btn1stGuest.id = 'BTN_1stGuest';
    btn1stGuest.type = 'button';
    btn1stGuest.innerHTML = 'Select This Character!';
    myDiv.appendChild(btn1stGuest);
}

EDIT: OK, I am definitely confused. 编辑:好的,我肯定很困惑。 I thought defining a function just meant writing the function. 我认为定义一个函数只是意味着编写该函数。 Do the functions really have to be nested inside each other like they are in @Huzaifah Farooq's fiddle? 函数是否真的必须像在@Huzaifah Farooq的小提琴中一样相互嵌套? What is the difference between declaring and defining? 声明和定义之间有什么区别? I am so lost! 我很迷路!

Have you tried to run startGame without the button? 您是否尝试过在没有按钮的情况下运行startGame Maybe then you could find if the issue was with the button or the function. 也许然后您可以找到问题出在按钮或功能上。 Not being too experienced myself, I think that you haven't created your button correctly. 我自己没有太过经验,我认为您没有正确创建按钮。 Try the document.createAttribute method and then append that attribute to your element. 尝试document.createAttribute方法,然后将该属性附加到您的元素。 Take a look at this: http://www.w3schools.com/jsref/met_document_createattribute.asp 看一下这个: http : //www.w3schools.com/jsref/met_document_createattribute.asp

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM