我有html表单,用户输入日期。
我需要脚本识别输入日期是否等于数组中的某个日期(“takeOverArray [”tz27092015“,”tz21102015“,”tz26092015“]”)(这是有效的)但是..
每个数组值([“tz27092015”,“tz21102015”,“tz26092015”])也是数组(日期时间)。
所以完整数组是:takeOverArray [“tz27092015 [”mor“,”lun“]”,“tz21102015 [”lun“]”,“tz26092015 [”eve“]”]
现在,我需要从表单输入日期等于(例如:)“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 :(得分: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;
})
现在,如果找到合适的值, index 将是该值的索引,如果未找到,则为-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");
}