私はJavascriptを少し新しくしています。私の機能で何が起こっているのか正確には分かりません。関数で動的にjavascriptイベントハンドラを定義する方法
背景:私のスクリプトでは、要素に「toggler」または「toggled」のいずれかのクラスを割り当てて自動的にリンクさせるようになっているので、トグルをチェック/非チェックすると、
スクリプトはpageloadで実行され、クラス "toggler"を持つ要素を検索し、それに応じてonclickハンドラを割り当てます。
function makeToggle() {
for (i=0;i<toggler.length;i++) {
toggler[i].onclick=function(){toggleSection(this,i)};
}
}
function toggleSection(obj,index) {
if (obj.checked==true) {
toggled[index].style.display="inline-block";
} else {
toggled[index].style.display="none";
}
}
「これは」正しく渡され、それが適用されますどのようなチェックボックスに解決されますが、「インデックス」が常に代わりのトグラー配列の長さに設定されている。ここでは、コードのビットは、私が持つ問題を抱えているのです増分される。例えば、第一および第二のtogglers' onclickのは次のようになります。
はonclick="toggleSection(this,0)"
onclick="toggleSection(this,1)"
それらが実際に(私は5つの要素がトグラーのように定義していると仮定した場合)に設定されているどのようなものです:私は何から
onclick="toggleSection(this,5)"
onclick="toggleSection(this,5)"
」あなたが関数を作成している間、あなたは私にそのようなをその変数を使用することはできません、私はそれがスコープの問題、または、私は関数を呼び出すだ方法だと思うが、私が見つけたものは何も
すべての答えは非常に有用でした。 jbabey'sは受け入れられた答えです。なぜなら、実際に何が起こっているのかを説明することで、もう少し深みが増すからです。閉鎖を理解するのに役立つ素晴らしいリンク – ctshiner