[英]JavaScript: How to return a modified function with `forEach` or `for` loop?
[英]How return function in loop (for .. of ..) javascript?
const btnSearch = [...document.querySelectorAll('a.validate')];
const fieldNik = document.getElementsByClassName('form-nik');
window.validate = function () {
for(const i of btnSearch.keys()){
btnSearch[i].onclick = function(){
var validate = true;
let identity = $(fieldNik[i]).val().replaceAll(' ', '').replaceAll('_', '');
if (!identity) {
bootbox.alert('NIK Tidak Boleh Kosong !');
validate = false;
} else if (identity[0] == '0') {
bootbox.alert('NIK tidak valid. Digit pertama tidak boleh 0');
validate = false;
} else if (identity[1] == '0') {
bootbox.alert('NIK tidak valid. Digit kedua tidak boleh 0');
validate = false;
} else if (identity.substr(12) == '0000') {
bootbox.alert('NIK tidak valid. 4 Digit terakhir tidak boleh nol');
validate = false;
} else if (identity.length < 16) {
bootbox.alert('NIK harus 16 digit !');
validate = false;
}
return validate;
}
}
}
我想用数据集在按钮中进行验证:
data-validatefunc="validate"
我的问题:如何return validate;
在这个函数window.validate
? 我尝试在window.validate
做,但它仍然失败。 这个循环 function 是否不能像forEach()
那样返回值?
您没有为validate()
定义返回 .. 只是为按钮单击事件返回。 您应该创建一个独立的validate()
function 并返回,然后将该 function 分配给按钮。
这是一个简短的例子:
//REM: Validation function as whole standalone function
function validate(){
var fieldNik = document.getElementsByClassName('form-nik');
var validate = true;
//REM: Whatever comes inbetween
//REM: Actual validation
return validate
};
//REM: Assigning the validation function to the button click-event
const btnSearch = [...document.querySelectorAll('a.validate')];
for(const i of btnSearch.keys()){
btnSearch[i].onclick = validate
};
无论您将其称为validate
还是window.validate
在您的上下文中都无关紧要,因为this
是window
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.