2015-09-23 18 views
0

我有html表單,用戶輸入日期。如果(數組名稱)從輸入值IndexOf具體值不起作用

我需要劇本什麼認識,如果輸入的日期等於從陣列(「takeOverArray [」 tz27092015" ,‘tz21102015’,‘tz26092015’]「)一些日期(即的工作),但..

每個數組值([「tz27092015」,「tz21102015」,「tz26092015」))也是數組(日期時間)。

所以全排列是:takeOverArray [ 「tz27092015 [」 鐵道部 「 」論「]」, 「tz21102015 [」 綸 「]」, 「tz26092015 [」 夏娃 「]」]

現在,我需要當從表單輸入日期等於(例如:)「tz27092015」時,下一個腳本將查找數組「tz27092015」是否具有特定詞語:「mor」,「lun」或「eve」。 (這不是工作:(這是我的問題)

我的代碼:

function checkTimeFunction() { 
var iddate= document.getElementById("takeover_date").value; //takeover_date(input from html form) 
var checkTime = "tz" + iddate.split('.').join(''); 

if(takeOverArray.indexOf(checkTime, 0) !== -1) //That's working { 
    console.log("date found"); 

    if (checkTime.indexOf("mor", 0) !== -1) //That's NOT working { 

     console.log("morning disabled"); 

    }; 
} 
}) 

所以我的問題是,爲什麼

if (checkTime.indexOf("mor", 0) == 0) 

工作不象以前的「的indexOf」上面這又如何我可以計算這個問題。

感謝您的幫助。

+0

'iddate.split( '')。join('')'更有效,因爲'iddate.replace(/.//,'')'。另外,* indexOf *默認從0開始,所以不需要第二個參數。 – RobG

回答

0

所以takeOverArray與字符串值的數組:

var takeOverArray = ["tz27092015['mor','lun']", 
        "tz21102015['lun']", 
        "tz26092015['eve']"]; 

因此,如果用戶選擇,比方說,2015年9月27日然後iddate的值將是:

var iddate = '27.09.2015'; 

轉換一個使用中takeOverArray值兼容的格式替換

var checkTime = 'tz' + iddate.replace(/\./g,''); 

現在你不能使用indexOf,因爲它使用嚴格的數組值相等,而你想匹配checkTime只有一部分值。爲此,您可以使用Array.prototype.findIndex。這是ECMAScript 2015功能,但您可以找到polyfill on MDN

所以首先你要找到匹配的元素的索引:所以,現在如果有合適的價值被發現

var index = takeOverArray.findIndex(function(v) { 
    return checkTime.indexOf(v) != -1; 
}) 

指數將是值的索引,或-1,如果沒有一個找到。所以現在:

if (index != -1) { 
    console.log("date found"); 

    // Test if the value at that index contains 'mor' 
    if (takeOverArray[index].indexOf('mor') != -1) { 
    console.log("morning disabled"); 
    } 
} else { 
    console.log("date not found"); 
}  

你完成了。這爲可運行代碼(需要用於findIndex支持):

// Array.prototype.findIndex polyfill from MDN 
 
if (!Array.prototype.findIndex) { 
 
    Array.prototype.findIndex = function(predicate) { 
 
    if (this === null) { 
 
     throw new TypeError('Array.prototype.findIndex called on null or undefined'); 
 
    } 
 
    if (typeof predicate !== 'function') { 
 
     throw new TypeError('predicate must be a function'); 
 
    } 
 
    var list = Object(this); 
 
    var length = list.length >>> 0; 
 
    var thisArg = arguments[1]; 
 
    var value; 
 

 
    for (var i = 0; i < length; i++) { 
 
     value = list[i]; 
 
     if (predicate.call(thisArg, value, i, list)) { 
 
     return i; 
 
     } 
 
    } 
 
    return -1; 
 
    }; 
 
} 
 

 

 

 
    var takeOverArray = ["tz27092015['mor','lun']", 
 
         "tz21102015['lun']", 
 
         "tz26092015['eve']"]; 
 

 
    var iddate = '27.09.2015'; 
 
    var checkTime = 'tz' + iddate.replace(/\./g,''); 
 
    var index = takeOverArray.findIndex(function(v) { 
 
     return v.indexOf(checkTime) != -1; 
 
    }) 
 
    
 
    if (index != -1) { 
 
     document.write("date found"); 
 

 
     // Test if the value at that index contains 'mor' 
 
     if (takeOverArray[index].indexOf('mor') != -1) { 
 
     document.write("morning disabled"); 
 
     } 
 
    } else { 
 
     document.write(checkTime + " not found"); 
 
    }

+0

感謝RobG。不幸的是你的解決方案不工作:(這就像checkTime [idx]只是沒有轉錄爲「tz27 ...」,因爲,當我寫到控制檯「tz27092015.indexOf('mor')== 0」return:true。 – DohnnyJepp13

+0

輸入: DohnnyJepp13

+0

對文本輸入有一個更改偵聽器是沒有意義的這是隻讀的,它不能改變,所以聽者永遠不會被調用 – RobG

相關問題