1

基本的に、どのボタンをWebアプリケーションからいつでも表示できるようにするオプションの単純な配列があります。

したがって、ホームの場合、アレイは次のようになります。ステップ1

if (view === "home") {
  visibleCommands = [];
  visibleCommands[0] = "contact";
  visibleCommands[1] = "about";
}
setVisibility(visibleCommands);

次に、配列をループします。ステップ2

setVisibility(visibleCommands) {
  var i;
  for (i in visibleCommands) {
    document.getElementById(visibleCommands[i].style.display = "inline";
  }
  addEvents(visibleCommands);
}

最後に、表示されているコマンドについて、個別のイベントリスナーを追加します。ステップ3

addEvents(visibleCommands) {
  var i;
  for (i in visibleCommands) {
    document.getElementById(visibleCommands[i]).addEventListener("click", visibleCommands[i], false);  
  }
}

ただし、この行を次のように変更すると、イベントはビューの要素に接続されていないようです。

document.getElementById(visibleCommands[i]).addEventListener("click", contact, false);

次に、要素に正しく接続され、contact()関数が呼び出されます。

私は何が間違っているのですか?

4

2 に答える 2

1

あなたのコード:

document.getElementById(visibleCommands[i]).addEventListener("click", visibleCommands[i], false);

visibleCommands[i]IDです:

document.getElementById(visibleCommands[i])

visibleCommands[i]クリックコールバックです:

.addEventListener("click", visibleCommands[i], false);

どうしてそれができますか?

"contact"contact2つの異なるものです。1つ目は値を持つ文字列でcontact、2つ目は関数への参照です


別物:

document.getElementById(visibleCommands[i].style.display = "inline";

関数呼び出しに欠落があり)ます:getElementById

document.getElementById(visibleCommands[i]).style.display = "inline";
于 2012-06-01T14:23:48.043 に答える
0

ハンドラーをどこにバインドしていますか?

document.getElementById(visibleCommands[i]).addEventListener("click", visibleCommands[i], false);

上記の行の 2 番目の引数は正しくない文字列です。これはハンドラー関数である必要があります。

以下のようなものを試してください、

document.getElementById(visibleCommands[i]).addEventListener("click", function () {
   alert('Clicked');
}, false);

addEventListenerについて読むことができます

また.push、配列に要素を追加する適切な方法を使用します。下記参照、

visibleCommands.push("contact");
visibleCommands.push("about");
于 2012-06-01T14:25:44.283 に答える