Javascript jQuery多个内部回调和作用域
服务器发送一些JSON。它包含结构化数据的列表。我将这些数据显示为文本框列表,每个文本框都有自己的Javascript jQuery多个内部回调和作用域,javascript,jquery,scope,Javascript,Jquery,Scope,服务器发送一些JSON。它包含结构化数据的列表。我将这些数据显示为文本框列表,每个文本框都有自己的onClick事件。单击时,文本框的值设置为结构化数据中的任何内容(这是一个唯一的ID,这意味着每个文本框在单击时都应显示ID) 当我第一次单击任何文本框时,它的值设置正确——使用来自服务器的数据的ID。但当我点击其他文本框时,它们会显示第一次点击文本框时的ID 我尝试了闭包var和$.proxy(),但它们似乎都不起作用。我已经检查了myAttribute的内容,它们在$.each()函数的每次迭
onClick
事件。单击时,文本框的值设置为结构化数据中的任何内容(这是一个唯一的ID,这意味着每个文本框在单击时都应显示ID)
当我第一次单击任何文本框时,它的值设置正确——使用来自服务器的数据的ID。但当我点击其他文本框时,它们会显示第一次点击文本框时的ID
我尝试了闭包var和$.proxy()
,但它们似乎都不起作用。我已经检查了myAttribute
的内容,它们在$.each()
函数的每次迭代中都会发生变化。但是,click()
事件似乎是在“运行时”进行计算的,不会更新
问题是:
myProcessedAttribute
包含正确的数据,而不是第一次单击时的数据$.ajax({
[...]
成功:功能(数据){
[...]
$.each(data.listOfData,函数(){
[...]
var myAttribute=this.mycolattribute;//创建对话框时调用“创建”事件。
第二次打开对话框时,不会触发创建事件,因为该元素上已存在对话框对象。
如果您想在同一对话框小部件上使用不同的值,请使用“打开”事件。
这是一个样本
你能在JSFIDLE上发布一个演示吗?
$.ajax({
[...]
success: function (data) {
[...]
$.each(data.listOfData, function () {
[...]
var myAttribute = this.myCoolAttribute; // <-- closure
jQuery('<p/>')
[...]
.click(function () {
var myProcessedAttribute = process(myAttribute);
[jquery ui dialog...]
create: function () {
// it always contains the same data
// the data on first click, after that, it never changes.
$("#myDialog").html(myProcessedAttribute);
}
});
});
}
});