2017-02-23 58 views
0

我正在使用bootstrap datepicker,并且我正在使用beforeShowDay来选择几天来启用,同时禁用每个不是我选择的日期。Bootstrap datepicker - 在foreach函数中返回

beforeShowDay : function(date) { 
     var date1 = new Date([2017, 02, 23]); 
     var date2 = new Date([2017, 04, 14]); 
     var date3 = new Date([2017, 06, 12]); 
     var dateArray = [date1, date2, date3]; 

     if (date.getTime() != date1.getTime() && date.getTime() != date2.getTime() && date.getTime() != date3.getTime()) { 
     return { 
      enabled: false 
     }; 
     } 
    } 

我有此代码的作品,但我想转换成一个foreach功能,例如:

beforeShowDay : function(date) { 
     var date1 = new Date([2017, 02, 23]); 
     var date2 = new Date([2017, 04, 14]); 
     var date3 = new Date([2017, 06, 12]); 
     var dateArray = [date1, date2, date3]; 

     dateArray.forEach(doBleh()); 
     function doBleh(element) { 
     if (datate.getTime() != element.getTime()) { 
      return { 
      enabled: false 
      }; 
     } 
     } 
     return doBleh; 
    } 

的代码,这最后一块是不行的,我似乎无法图出。

任何帮助,将不胜感激

+0

没有日期显示在所有的时候,当我这样做......谢谢你回答虽然 – Stephen

回答

2

我可以建议你使用Array.prototype.indexOf()

beforeShowDay : function(date) { 
    var date1 = new Date([2017, 02, 23]); 
    var date2 = new Date([2017, 04, 14]); 
    var date3 = new Date([2017, 06, 12]); 
    var dateArray = [date1.getTime(), date2.getTime(), date3.getTime()]; 

    if (dateArray.indexOf(date.getTime()) == -1) { 
     return { 
      enabled: false 
     }; 
    } 
} 

从MDN:在的indexOf()方法返回在一个给定的元素,可以发现第一个索引在数组中,如果不存在则为-1。

在代码中,这条线:

dateArray.forEach(doBleh()); 

是错误的。

而不是传递一个回调函数,而是传递一个函数执行的结果。

将其更改为:

dateArray.forEach(doBleh); 

在任何情况下,在foreach内部的回报是不是你beforeShowDay函数的返回。

+0

虽然没有被禁用,所以这似乎并不像它的工作。它在if里面。我认为它与返回有关,因为它返回到foreach函数,但不是主函数 – Stephen

+0

这似乎工作!谢谢,你能解释你的代码吗,我会给它一个大拇指。 我不明白indexOf与foreach和== -1混淆我 – Stephen

+1

@Stephen:答案改进。让我知道。 – gaetanoM