考虑我有10个输入框,(使用datepicker插件Fyi)
我对点击输入框时有一套特定的要求,或者同时点击了plux / minus div(根据需要显示/隐藏10个框)。
这个循环似乎没有拾取x和y变量。
警报我总是以回声6为例..不知道为什么......
这是我的循环...以及为什么x和y似乎没有设置的想法?
for (var x = 1; x <= 10; x++) {
var y = x+1;
$('#date_start'+y).attr("disabled", "disabled");
$('#date_start'+x).datetimepicker();
$('#date_start'+x).blur(function() {
if (isset($('#date_start'+x).val())) {
$('.add_time_'+x).css('visibility', 'visible');
} else {
$('.add_time_'+x).css('visibility', 'hidden');
$('.rem_time_'+y).css('visibility', 'hidden');
}
});
$('.add_time_'+x).click(function() {
alert('ici: ' + y);
$('.date_'+y).css('visibility', 'visible');
$('#date_start'+y).removeAttr("disabled");
$('.rem_time_'+y).css('visibility', 'visible');
});
$('.rem_time_'+y).click(function() {
$('.date_'+y).css('visibility', 'hidden');
$('#date_start'+y).attr("disabled", "disabled");
$('#date_start'+y).val('');
$('.rem_time_'+y).css('visibility', 'hidden');
$('.add_time_'+y).css('visibility', 'hidden');
});
}
=== 注意,isset,是一个单独的函数,我必须检查字段值是否为空/未设置 当我尝试回显$('#date_start'+ x).val()
的值时它回声未定义...即使相应的输入在屏幕上有值。
答案 0 :(得分:2)
在事件处理程序中使用外部变量时,需要包装闭包。让我们举个例子:
$('#date_start'+x).blur(function() {
if (isset($('#date_start'+x).val())) {
$('.add_time_'+x).css('visibility', 'visible');
} else {
$('.add_time_'+x).css('visibility', 'hidden');
$('.rem_time_'+y).css('visibility', 'hidden');
}
});
这将始终使用外部变量x和y的最后一个值,而不是创建此事件处理程序时的值。你需要做的是将它包装在一个立即执行的函数中:
$('#date_start'+x).blur((function(xlocal, ylocal) {
return function() {
if (isset($('#date_start'+xlocal).val())) {
$('.add_time_'+xlocal).css('visibility', 'visible');
} else {
$('.add_time_'+xlocal).css('visibility', 'hidden');
$('.rem_time_'+ylocal).css('visibility', 'hidden');
}
}
})(x,y));