2017-02-23 57 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