2016-04-25 30 views
0

私の問題には2つの側面があります。JavaScriptのonclick getvalueは定義されていません

私はそうのようなループを介して生成される単純なGET値を送信しようとしています:ここで

for(var x=0; x<del.length; x++) { 
     del[x].onclick = function() { 
     WORK(x); 
     } 
    } 

は私の不満を仕事関数が

function WORK (x) { 
     var y = ids[x]; 
     var url = "Delete.php?val=" + y; 
     window.location = url; 
    } 

である私は私がちょうど合格する必要があります知っています値を関数に...しかし、私はそのようなページをロードすると関数を実行し、私のクリックを待つことはありませんように設定されているように、今は常に未定義の値を渡す...何が起こっているここに?

+1

「デル」とは何ですか?それはDOMノードのコレクションですか?いくつかのHTMLと他のコードのいくつかを見ると便利です。大きな問題は、スコープの問題のために、すべてのクリックの最後の値として常に 'x'を使用することです。 – Andy

+0

@Andyによって指摘されているように、あなたは常に最後の値としてxを取得します。無名関数内でclousreを使用して、クリックイベントでデータを正しくバインドする必要があります。このトピックに関する記事がたくさんあります。 – user3045179

+0

tdのクラス名を削除するには、基本的には、GET経由で行IDの値を送信する削除ボタンを作成したかったのですが、ajaxがこれをもっとうまくやることができますが、これはもっと楽しいようでした。 –

答えて

0

可変ホイスト+ノンスコープ変数forループ。 使用.forEach

for (var x = 0; x < del.length; x++) { 
    (function() { 
     var elem = del[x]; 
     ... 
    })(); 
} 

あなたはループを反復処理、しか1 x変数がある:

Array.prototype.slice.call(del).forEach(function(elem, index) { 
    elem.onclick = ... 
}); 

またはあなたは、すぐに、呼び出された匿名関数を使用できない場合。 forループにはスコープが設定されておらず、各繰り返しで変更されます(x++)。クリックをトリガすると、イベントハンドラが呼び出され、xという値を引数として持つWORKが呼び出されます。実行するまでにはすでにdel.lengthになっています。

+0

'del'は配列ではありません... – Andy

+0

あなたのお役に立てていただき、ありがとうございました。 –

関連する問題