删除select中每个选项的disabled属性

时间:2015-04-20 14:14:40

标签: javascript jquery

我有一个选择有不同的选项。我设置为在过去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));
    }
});

2 个答案:

答案 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));