如何在循环中返回函数(对于.. of .. javascript)?

问题描述 投票:0回答:1
    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中执行操作,但仍然失败。此循环功能是否不能返回forEach()之类的值?

javascript html jquery arrays dom
1个回答
0
投票

您没有为validate()定义返回,只是为按钮单击事件返回。您应该制作一个带有返回的独立validate()函数,然后将该函数分配给按钮。

这里是一个简短的示例:

//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
};
© www.soinside.com 2019 - 2024. All rights reserved.