我在循环中遇到闭包问题,但我仍然使用单独的功能
I am getting closure issue on loop, still i use the separate function
在我的循环中,我正在尝试将class
名称添加到元素中。 为了避免closure
问题,我保留了单独的功能。
但我的问题仍未解决。
我在对象中找到了这样的类名:
<button class="sidebar1 sidebar2 sidebar3 sidebar4 sidebar5">Click</button>
这是我的JS:
var ob = {};
var catcheBars = {};
var sidebar = $('div.sidebar');
var catchedBar = sidebar;
for(i=1; i <= 5; i++) {
if(!ob.hasOwnProperty(i+'page')) {
ob[i+'page'] = catchedBar;
}
var x = i;
var x = function (x) {
$(ob[x+'page']).find('button').addClass('sidebar'+x);
}(x)
}
$("#sideBar").html(ob['1page']);
住
当你做var catchedBar = sidebar;
时,你实际上是在catchedBar
引用sidebar
对象。 然后在循环中,当你执行ob[i+'page'] = catchedBar;
时,你现在正在做另一个引用。
当您在 $(ob[x+'page'])
上执行.addClass()
时,您将类添加到集合中的所有内容中ob[x+'page']
因为它包含对$('div.sidebar')
集合的引用。
对于您要实现的目标而言,此代码有点太复杂了。 可以使用jQuery的.each
方法简化它:
$('div.sidebar').each(function(i, v){
$(v).find('button').addClass('sidebar'+i);
});
注意:我不是100%确定你想做什么。
更新:看到您的评论后,我认为您需要做的就是:
$('div.sidebar button').click(function(){
$("#sideBar").html($(this).text());
});
演示:http://jsfiddle.net/xtcxv8hd/
我像这样更新,它对我有用
var ob = {};
var catcheBars = {};
var sidebar = $('div.sidebar');
for(i=1; i <= 5; i++) {
if(!ob.hasOwnProperty(i+'page')) {
ob[i+'page'] = sidebar.clone(false);
}
var x = function (x) {
$(ob[x+'page']).addClass('sideBar'+x);
}(i);
}
sidebar.empty();
$("#sideBar").html(ob['1page']);
console.log(ob);
谢谢大家!住
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 在单独的ul's
- Javascript排序的图像弹出窗口..可以't单独弹出
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 谷歌应用脚本 - 将一些功能移动到单独的文件中
- 如何为每个标签单独运行 Chrome 扩展程序功能
- 我在循环中遇到闭包问题,但我仍然使用单独的功能
- 复选框选中功能,用于单个页面中的两组复选框,不能单独调用功能
- jQuery单击功能可从元素中删除属性并在单独单击时恢复属性
- 我如何才能将我的滚动脚本变成一个单独的功能
- JavaScript初学者:在函数中编码单独的空格字符有什么功能区别
- 观察具有单独点击-观察功能的元素中元素的点击
- jQuery背景颜色单独更改功能
- 任何方式访问量角器的功能,从每个单独的规格
- 如何让鼠标悬停功能在多个图像上工作,每个图像都有单独的附带文本
- 使用JQuery更改单独的单选按钮状态和运行相关功能