2017-01-20 31 views
2

私はjavascriptで多くの知識を持っていないので、ここで何が問題なのか分かりません jsでdivを動的に作成し、各divをクリックすると関数が呼び出されます。再編成されません。これはコードJavascript関数が認識されない

for (......) { 
    var listatema = document.createElement("div"); 
    listatema.innerHTML += "<a href='javascript: void(0)' onClick='functest(" + pag + ")'>" + temat + "</a>"; 
    document.getElementById('menu').appendChild(listatema);} 
} 

「トピック」の部分がテキストである、関数「functestは、」引数「PAG [AUX]」、これは数であります。

機能は次のとおりです。私が試した

function functest(arg){ 
    console.log(arg) 
} 

他の代替は、それを変更です:onClick='"+ functest(pag) +"'

私は引用符「」と機能の作業良いの位置を変えますが、ときに実行されますページが読み込まれ、クリックするのを待つことはありません。

答えて

1

あなたが何かやっている場合はあなたのコードは動作するはずです:

function functest(arg) { 
 
    console.log(arg); 
 
} 
 

 
for (var i = 0; i < 10; i++) { 
 
    var listatema = document.createElement("div"); 
 
    listatema.innerHTML += "<a href='javascript: void(0)' onClick='functest(" + i + ")'>" + i + "</a>"; 
 
    document.getElementById('menu').appendChild(listatema); 
 
}
<div id="menu"></div>

を、私は、しかし、addEventListenerを使用したり、文書要素オブジェクトのonClickハンドラを設定するのではなく設定をお勧めしますinnerHTML特にユーザー入力をレンダリングする場合、innerHTMLの設定は推奨されません。 https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML#Security_considerationsを参照してください。あなたのケースでは、それはおそらく、本当に問題ではありませんが、テスト中に、私はこの1つ上の私の脳を障るきた

for (var i = 0; i < 5; i++) { 
 
    var wrapper = document.createElement("div"); 
 
    var listatema = document.createElement("a"); 
 
    listatema.textContent = i; 
 
    listatema.href = "javascript:void(0)"; 
 
    listatema.addEventListener('click', function(e) { 
 
    console.log(this.i); 
 
    }.bind({ i : i })); 
 
    wrapper.appendChild(listatema); 
 
    document.getElementById('menu').appendChild(wrapper); 
 
}
<div id="menu"></div>

+0

:)ことができれば、それはそれを避けることをお勧めですJSFiddleで同様のソリューション本当に面白いのは、**最初の**ソリューションがコードスニペットで完璧に動作することですが、JSFiddleで関数が定義されていないことを示しています。あなたのコードを正確にコピーしました。なぜこのようなアイデアですか? [フィドル](https://jsfiddle.net/Obsidian_Age/yrL8ybgm/)。あなたの2番目の解決策は、両方の場所でうまく動作しているようです:) –

+1

jsFiddleでスクリプトがどのように注入されるのでしょうか。私は、関数が 'onLoad'ハンドラにカプセル化されているためだと思うので、グローバルなスコープには巻き込まれません。 HTMLに埋め込みスクリプトを追加すると、https://jsfiddle.net/msindwan/yrL8ybgm/1/のように動作します。 –

+0

それはそうですね!私は質問をした人ではありませんでしたが、あなたはまだJSFiddleの限定された範囲を指摘するのに私にとって大きな助けになりました。私はあなたの答えをもう一度upvotedしかし、私もあなたのコメントのためのいくつかの担当者を授賞することができたらいいと思う;) –

0
onClick='functest(\""+ pag +"\")' 

パラメータを引用するのを忘れました。

関連する問題