0


addEventListener即時無名関数の内部での 使用にスコープの問題があるようです。

イベントリスナーの内部で、(コンストラクターとを使用して)イミディエート関数の外部で構築されるJavascript「クラス」のインスタンスを作成していますprototype

グッドプラクティスを維持するために、私は即時関数を使用してグローバル変数addEventListenerを回避し、インラインJavascriptの使用を回避したいと思いました(したがって、HTMLから分離しました)。

では、スコープの問題を発生させずにこれを正しく行うにはどうすればよいでしょうか。また、そうするためのグッドプラクティスは何ですか。


これが私のhtmlです:

<html>
    <head>
        <title>asdf</title>
    </head>
    <body>
        <input type = "text" id = "userInput" />
        <input type = "button" id = "submitButton" value = "submit" />

            <script type = "text/javascript" src = "asdf.js" />
    </body>
</html>


...そしてこれが私のJavascriptですasdf.js(これは機能していません):

// constructor for object-oriented processing of the user input
function Statement(expression)
{
    this.expression = expression;
}
    // instance method
    Statement.prototype.checkSyntax = function()
    {
        var newExp = this.expression;

        return newExp;
    };

// immediate anonymous function
(function()
{   
    var submitButton = document.getElementById("submitButton");

    // event listener for the submit button
    submitButton.addEventListener("onclick", function(event)
    {
        var userInput = document.getElementById("userInput");

        // creating a new object with constructor above
        var expr = new Statement(userInput);

        // calling instance method of the "class" Statement
        alert(expr.checkSyntax() );

        // disable the button after first use
        event.stopImmediatePropagation();
    }, false);

})(); // end of immediate anonymous function
4

2 に答える 2

1

addEventListenerclickではなく、のような引数を取りますonclick。ただし、古いIEにattachEventはが必要onclickです。他のすべては問題ないようです。

于 2013-01-11T03:15:24.697 に答える
1

動作していない私のJavascript

いくつかの問題があるかもしれませんが、(不必要な)IEFEとは何の関係もありません。

  • addEventListenerなしのイベント名が必要"on"です-それはでM$の癖だけattachEventです。
  • DOM要素が作成された後にJSが実行されることを確認してください-そうでない場合submitButtonnull
  • DOMノードStatementではなく、コンストラクターに文字列を渡したいと思います。<input>userInput.value
于 2013-01-11T03:18:31.857 に答える