Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除“选择”中每个选项的禁用属性_Javascript_Jquery - Fatal编程技术网

Javascript 删除“选择”中每个选项的禁用属性

Javascript 删除“选择”中每个选项的禁用属性,javascript,jquery,Javascript,Jquery,我有一个选择不同的选项。我将过去30秒内使用的选项设置为禁用。我试图得到的是,当条件不再有效但页面仍然打开时,再次启用选项。 下面的代码适用于一个选项,但由于它在.each()中,因此每个选项都会被覆盖,因此不起作用。 我正在考虑一种存储diff值的解决方案,向元素添加一个类,并对具有该类的项运行set timeout,但我认为这种代码不是最有效的。 关于如何使用更高效的代码(可能在每个循环中)获得相同的结果,有什么想法吗 $(“#目标选项”)。每个(函数(){ var ds=$(this.at

我有一个选择不同的选项。我将过去30秒内使用的选项设置为禁用。我试图得到的是,当条件不再有效但页面仍然打开时,再次启用选项。 下面的代码适用于一个选项,但由于它在.each()中,因此每个选项都会被覆盖,因此不起作用。 我正在考虑一种存储diff值的解决方案,向元素添加一个类,并对具有该类的项运行set timeout,但我认为这种代码不是最有效的。 关于如何使用更高效的代码(可能在每个循环中)获得相同的结果,有什么想法吗

$(“#目标选项”)。每个(函数(){
var ds=$(this.attr('data-ts');
控制台日志(“ts vale”+ds);
var dateArray=ds.split(“”;//拆分日期和时间
var ds1=dateArray[0]。拆分(“-”;//拆分日期中的每个部分
var ds2=dateArray[1]。拆分(“:”;//及时拆分每个部分
var newDate=新日期(ds1[0],(+ds1[1]-1),ds1[2],ds2[0],ds2[1],ds2[2])。getTime();//解析它
控制台日志(“allora vale”+新日期);
var currentDate=new Date().getTime();
控制台日志(“阿德索谷”+当前日期);
var diff=当前日期-新日期;
控制台日志(diff);
如果(差值<30000){
$(this.prop('disabled',true);
setTimeout(函数(){
$(this.prop('disabled',false);
}(30000);;
}
});

尝试更改最后一部分:

setTimeout(function() {
    $(this).prop('disabled', false);
}.bind(this), (30000-diff));

我也遇到过同样的情况,我有一个循环,希望为每个循环中的回调绑定一个更改,我发现所有这些都只对最后一个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));
 }

我不喜欢使用.bind。我解决了将设置超时移到each函数之外的问题(它实际上对代码执行相同的操作)。是的,它执行相同的技巧。这里的想法是了解为什么会发生这种情况。解决问题的困难部分有很多方法。在这种情况下:每个都是一个循环,因此每次都会覆盖设置超时。Bind复制了setTimeout,瞧!
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));