繁体   English   中英

如何在循环中返回 function (for.. of..) javascript?

[英]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在您的上下文中都无关紧要,因为thiswindow

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM