我有一个选择有不同的选项。我设置为在过去30秒内使用的禁用选项。我想要获得的是当条件不再有效但页面仍然打开时再次启用选项。 以下代码适用于一个选项,但由于它位于.each()内部,因此每个选项都会覆盖它,但它不起作用。 我正在考虑一个解决方法,存储diff值,向元素添加一个类,并在该类的项目上运行set timeout,但我认为这种代码不是最有效的。 有关如何使用更高效的代码获得相同结果的任何想法(在每个循环内部可能?)。
$('#destinatario option').each(function(){
var ds = $(this).attr('data-ts');
console.log("ts vale "+ds);
var dateArray = ds.split(" "); // split the date and time
var ds1 = dateArray[0].split("-"); // split each parts in date
var ds2 = dateArray[1].split(":"); // split each parts in time
var newDate = new Date(ds1[0], (+ds1[1] - 1), ds1[2], ds2[0], ds2[1], ds2[2]).getTime(); //parse it
console.log("allora vale "+newDate);
var currentDate = new Date().getTime();
console.log("adesso vale "+currentDate);
var diff = currentDate - newDate;
console.log(diff);
if(diff < 30000){
$(this).prop('disabled', true);
setTimeout(function() {
$(this).prop('disabled', false);
}, (30000-diff));
}
});
答案 0 :(得分:1)
尝试更改最后一部分:
setTimeout(function() {
$(this).prop('disabled', false);
}.bind(this), (30000-diff));
答案 1 :(得分:1)
我有相同的情况,问题我有一个循环,并希望为每个循环绑定一个回调的变化,我发现所有这些只是最后一个id的工作,并解决它我做了以下绑定调用回调时的参数,以便保存状态:
var arr = ["id1" ,"id2", "id3"];
for(i=0; i<arr.length; i++){
jQuery("#form_target_input").bind('change',function (id, e){
yiel.fn.setCookie("form_targeting_"+id, true)
}.bind(null, id));
}
适用于您的情况:
setTimeout(function(element, e) {
$(element).prop('disabled', false);
}.bind(null, this), (30000-diff));