XMLを収集するajax呼び出しがあり、そのデータに基づいて、click()jqueryリスナーをアタッチする多数のdivが作成されます。クリックすると、それらのdivが関数を呼び出し、その関数にパラメーターを渡すようにします。ただし、クリックが呼び出されるまでに、パラメータの値が変更されています。これは、問題を示すために作成したjsfiddleの例です。
$(document).ready(function() {
function x() {
$.ajax({
type: "POST",
url: "/echo/xml/",
dataType: "xml",
data: {
xml: "<the>xml</the>"
},
success: function(xml) {
console.log('success');
$('#test').show();
var text = "CORRECT";
$('#test').click(function() {
insertText(text);
console.log(text);
});
text = "WRONG";
}
});
}
x();
});
function insertText(t) {
$('#test').html(t);
}
テキストが間違っているのではなく、正しいものとして表示されるようにしたい。
これは少し複雑な例ですが、スコープと何が起こっているかという観点から、実際のコードを可能な限りシミュレートしようとしています。click()
クリックに基づいて関数が呼び出されるまでに、の値text
が変更されています。作成時にの値を呼び出しtext
に「焼き付ける」方法はありますか?XMLを実行し、後で使用するためにすべてのデータを変数に保持したくないので、ループをclick()
介してこれらのいくつかを作成します。for