我似乎无法弄清楚这一点。它对于 for循环的第一部分工作得很好,但是在内部点击函数中我失去了var,我评论它在哪里断开...
另外,可能还有一种更清晰的方式来编写它:
$(function () {
var a = "rgb(58,88,90)";
var b = "rgb(123,156,158)";
for (var c = 1; c <= 3; c++) {
if ($("#select" + c).is(":checked")) {
$("#select" + c + "-icon").css("background", a);
var d = document.getElementById("select" + c + "_title").innerHTML;
$("#Selection_" + c).val(d)
} else {
$("#select" + c + "-icon").css("background", b);
$("#Selection_" + c).val("Off")
}
$("#select" + c).click(function () {
// here's where it stops working... var c is no longer recognized...
if ($("#select" + c).is(":checked")) {
$("#select" + c + "-icon").css("background", a);
var d = document.getElementById("select" + c + "_title").innerHTML;
$("#Selection_" + c).val(d)
} else {
$("#select" + c + "-icon").css("background", b);
$("#Selection_" + c).val("Off")
}
})
}
return false });
以下是第一对目标对象:
<label for="select1"><aside id="select1-icon" class="icon-form right rounded"><img src="../common/images/icon-viewDemo.png" /></aside>
<input type="checkbox" id="select1" name="select" checked="checked" class="view" /> <h5 id="select1_title">Watch Demo</h5></label>
和
<input type="hidden" id="Selection_1" name="Selection_1" value=""/>
答案 0 :(得分:2)
您正在捕获循环变量,因此当for
循环结束时,变量c
的值为4,这是函数执行时看到的值。
var x;
for (var c = 0; c <= 3; c++) {
x = function() { alert(c); };
}
x();
这会提醒4
,因为当您致电x()
时,变量c
的值为4
。
如果要捕获c
的值而不是变量本身,可以为每个函数分别设置一个副本。为了便于阅读,我将处理程序拆分为一个单独的本地函数。
function createClickHandler(c) {
return function() {
if ($("#select" + c).is(":checked")) {
$("#select" + c + "-icon").css("background", a);
var d = document.getElementById("select" + c + "_title").innerHTML;
$("#Selection_" + c).val(d)
} else {
$("#select" + c + "-icon").css("background", b);
$("#Selection_" + c).val("Off")
}
}
};
$("#select" + c).click(createClickHandler(c));
您可以详细了解此现象on this Web page和this earlier stackoverflow question。
答案 1 :(得分:0)
c在全局范围内不存在,因此单击时不存在。如果您将其设置为全局,则在单击发生时它将不具有您想要的值。所以使用eval();用它的文字值替换c,因此当点击时,你有你想要的值。
$(
function () {
var a = "rgb(58,88,90)";
var b = "rgb(123,156,158)";
for (var c = 1; c <= 3; c++) {
if ($("#select" + c).is(":checked")) {
$("#select" + c + "-icon").css("background", a);
var d = document.getElementById("select" + c + "_title").innerHTML;
$("#Selection_" + c).val(d);
} else {
$("#select" + c + "-icon").css("background", b);
$("#Selection_" + c).val("Off");
}
eval(
'$("#select"' + c + ').click(function () {' +
'if ($("#select"' + c + ').is(":checked")) {' +
'$("#select"' + c + '"-icon").css("background", a);' +
'var d = document.getElementById("select"' + c +
'"_title").innerHTML;' +
'$("#Selection_"' + c + ').val(d)' +
'} else {' +
'$("#select"' + c + '"-icon").css("background", b);' +
'$("#Selection_"' + c + ').val("Off");' +
'}' +
'});'
);
}
return false;
}
);