我对 jQuery 尤其是 javascript 的了解一直非常有限,我正在努力变得更好。
考虑到这一点,我正在尝试创建某种“可扩展的验证框架”,因为我可以创建一个带有验证函数及其错误消息的对象,将其推送到一个数组中,然后调用所有这些方法并报告来自那些失败的。
所以首先我做了一些非常简单的事情,只是为了看看基本的验证是这样的:
var selectedTourDate = $("#tourDate").val();
var list = $("#bookedTourDate *");
var isDateBooked = list.filter(function () {
return (this.innerHTML == selectedTourDate) ;
}).length !== 0;
if (isDateBooked) {
alert("Date invalid");
return;
}
这工作正常。
然后我创建了我的“框架”,它是这样的:
function Validator(fn, errorMessage) {
this.validationFunction = fn;
this.errorMessage = errorMessage;
};
var validationRunner = {
validators: [],
errorMessages: [],
validationResult: true,
addValidation: function (validator) {
validationRunner.validators.push(validator);
},
validate: function () {
for (var validator = 0; validator < validationRunner.validators.length; validator++) {
if (validationRunner.validators[validator] instanceof Validator) {
var result = validationRunner.validators[validator].validationFunction();
validationResult = validationRunner.validationResult && result;
if (!result)
validationRunner.errorMessages.push(validationRunner.validators[validator].errorMessage);
}
}
},
getErrorMessage: function () {
var message = "<ul>";
for (var errorMessage = 0; errorMessage > validationRunner.errorMessages.length; errorMessage++) {
message += "<li>" + errorMessage + "</li>";
}
message += "</ul>";
return message;
}
}
然后修改第一块代码如下:
var selectedTourDate = $("#tourDate").val();
var list = $("#bookedTourDate *");
var tmp = new Validator(function () {
return list.filter(function () {
return (this.innerHTML == selectedTourDate);
}).length !== 0;
}, "Date already booked");
validationRunner.addValidation(tmp);
validationRunner.validate();
var msg = validationRunner.getErrorMessage();
这根本不起作用。
似乎问题在于在此声明中:
返回(this.innerHTML == selectedTourDate);
“this”是 Validator 对象,而不是列表中的 html 元素,这让我感到困惑,因为它应该在“filter”方法的函数内部。
有没有办法纠正这个问题,所以我可以在这里完成我想要做的事情?