自递归调用(可能,由于涉及闭包)
Self-recursive calls (probably, due to closure involving)
我基本上有这样的代码:
$(document).ready(function() {
(function fillOutTable() {
$.ajax({
type: 'GET',
url: 'someUrl',
success: function(data) {
var myTable = $("#tbl1");
for(var i in data.myCollection) {
/*filling out the table*/
var str = $(
["<tr>",
"<td>", counter++, "</td>",
"<td>",
"<a href='#' class='myClass'>", data.myCollection[i].object1.name, "</a>",
"</td>",
"<td>", title1, "</td>",
"<td>", title2, "</td>",
"<td>", title3, "</td>"
"</tr>"].join("")
);
myTable.find("tbody").append(str);
myTable.find("tbody").on("click", ".myClass", function() {
$('#twitterBtstrModal').on('shown.bs.modal', function() {
alert('yes: ' + data.myCollection[i].object1.name);
}).modal();
});
}
},
error: function(jqXHR, textStatus, errorThrown) {
showNoDataMessage();
alert('Something went wrong!');
}
});
})();
这段代码有两个问题:
当我单击表中的链接(这是
data.myCollection[i].object1.name
的文字)时,无论我单击哪个链接,它总是在警报中显示相同的数据yes: data.myCollection[i].object1.name
。虽然它们的html代码不同我点击的链接越多,每次点击的警报越多:第一次只有一个警报出现,下一次- 2个,下一次- 4个或更多。
有多重问题
- 循环中闭包变量的使用
- 绑定事件处理程序在另一个…等
试
jQuery(function ($) {
var myTable = $("#tbl1"),
$tbody = myTable.find("tbody"),
$model = $('#twitterBtstrModal');
$.ajax({
type: 'GET',
url: 'someUrl',
success: function (data) {
$.each(data.myCollection, function (i, data) {
/*filling out the table*/
var str = $(
["<tr>",
"<td>", counter++, "</td>",
"<td>",
"<a href='#' class='myClass'>", data.myCollection[i].object1.name, "</a>",
"</td>",
"<td>", title1, "</td>",
"<td>", title2, "</td>",
"<td>", title3, "</td>"
"</tr>"].join(""));
//store the row data using data api
$(str).appendTo($tbody).data('rowdata', data)
});
},
error: function (jqXHR, textStatus, errorThrown) {
showNoDataMessage();
alert('Something went wrong!');
}
});
//register these events only once
//a delegated handler which will get the current rows data and set it to the modal
$tbody.on("click", ".apiKeyName", function () {
$model.data('mydata', $(this).closest('tr').data('rowdata')).modal();
});
$model.on('shown.bs.modal', function () {
//read the data from the modal's data
var data = $model.data('mydata');
alert('yes: ' + data.object1.name);
})
});
免责声明:未测试
相关文章:
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- Javascript.闭包和dynamic'这'实际上具有约束力
- 构造函数函数闭包变量
- 闭包js框架-将ArrayBuffer转换为字符串
- 如何在Angularjs中重构闭包中的重复代码
- 如果闭包的行为类似于对象,它们是对象吗?(好像不像)
- 对闭包内对象的赋值的行为类似于指针
- jQuery.thoggle()等效于Google闭包
- Swift中的闭包概念类似于Javascript中的闭包
- 将常见的js代码移到依赖于闭包的函数中
- 将变量添加到函数作用域/闭包中.函数相当于窗口对象