1

特定の文字をクリックするたびに、最初のスロットvalueがクリックした文字に変更されるようvalueにします。をループに入れたのは正しいですか、それとも別の方法で認識すべきですletter.onclick = letterClick(this);か。forまた、letterClick()関数には何を含める必要がありますか?

// Makes slots and letters for the chosen word.
function maker() {
    for (i=0; i<word.length; i++) {
        var slot = document.createElement("input");
        var letter = document.createElement("input");
        var letters=(shuffledWord).split("");
        slot.type = "submit";
        slot.value = "";
        slot.id = "slot" + i;
        slot.setAttribute('id', 'slot');
        letter.type = "submit";
        letter.value = letters[i];
        letter.id = "letter" + i;
        letter.onclick = letterClick(this);
        letter.setAttribute('id', 'letter');
        document.getElementById("slotbar").appendChild(slot);
        document.getElementById("letterbar").appendChild(letter);
    }
}
4

1 に答える 1

3

そうではありません。thisメソッドを実行するコンテキストを指しますmaker。したがって、ほとんどの場合、これをウィンドウとして取得し、onClick のハンドラーをバインドするときに関数を呼び出したくありません。関数参照である必要があります。

試す

 letter.onclick = letterClick.bind(this, letter); 

これで、最初の引数をその文字要素として関数が呼び出されます。

あなたがするとき

letter.onclick = letterClick(this);

すぐに関数を呼び出し、その結果をハンドラーとして設定します。つまり、実際のハンドラーである別の関数参照を返さない場合、機能しません。

于 2013-10-10T20:03:19.977 に答える