【问题标题】:addEventListener fires on page load when trying to use prompt尝试使用提示时,addEventListener 在页面加载时触发
【发布时间】:2021-08-13 05:48:18
【问题描述】:

我无法让 addEventListener 仅在单击时触发,而不是在页面加载时触发。

我尝试为提示寻找addEventListener 的答案,但只找到警报的答案并尝试了它们,但没有任何效果。

const poll = {
        question: 'What is your favorite programming language?',
        options: [ '0: JavaScript', '1: PHP', '2: Rust', '3: C++' ],
        registerNewAnswer:
            Number( prompt( 'What is your favourite programming language?\n' +
                '     0: JavaScript\n' +
                '     1: PHP\n' +
                '     2: Rust\n' +
                '     3: C++' ) ),
        answerPoll() {
            switch ( this.registerNewAnswer ) {
                case 0:
                    this.answers[ 0 ]++;
                    console.log( this.answers, 'Vote for JavaScript' );
                    break;

                case 1:
                    this.answers[ 1 ]++;
                    console.log( this.answers, 'Vote for PHP' );
                    break;

                case 2:
                    this.answers[ 2 ]++;
                    console.log( this.answers, 'Vote for Rust' );
                    break;
                case 3:
                    this.answers[ 3 ]++;
                    console.log( this.answers, 'Vote for C++' );
                    break;
                default:
                    console.log( 'Not a Choice on the List Try Again!' );
            }

        },
        answers: new Array( 4 ).fill( 0 )
    };
   

    document.querySelector( '.poll' ).addEventListener( 'click',
        poll.answerPoll.bind( poll ) );

【问题讨论】:

  • 并且控制台中没有错误信息?
  • 无,我什至尝试过使用调试器。
  • 这是整个代码在您的 html 标头中吗?

标签: javascript dom-events javascript-objects


【解决方案1】:

您的registerNewAnswer 是一个属性,它试图通过提示您输入您最喜欢的编程语言来计算该属性。如果您的目标是仅在调用 answerPoll() 时出现该提示,则 registerNewAnswer 需要是由 answerPoll() 调用的方法。

const poll = {
        question: 'What is your favorite programming language?',
        options: [ '0: JavaScript', '1: PHP', '2: Rust', '3: C++' ],

        registerNewAnswer() { /* <—- you made this a property instead of a method */

            return Number( prompt( 'What is your favourite programming language?\n' +
                '     0: JavaScript\n' +
                '     1: PHP\n' +
                '     2: Rust\n' +
                '     3: C++' ) )
        },
        answerPoll() {

            switch ( this.registerNewAnswer() /* <—- you weren't calling the registerNewAnswer method */  ) {

                // ...
            }
        },
        answers: new Array( 4 ).fill( 0 )
    };

【讨论】:

    猜你喜欢
    • 2011-01-23
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2011-09-21
    • 2013-12-02
    • 1970-01-01
    相关资源
    最近更新 更多