如果使用 jquery 输入字段中存在值,如何禁用表单?

How to disable form if value exists in input field using jquery?

我的问题是我正在检查数据库中的输入字段值,如果找到则不应提交表单。但在我的例子中,如果有 3 个输入字段,一个表示已经存在,另一个是正常值。表单被提交。我如何根据在任何输入字段中未发现错误来防止提交表单。

public function check_module($postdata)
{
    $module_name = $postdata['module_name'];
    $data['select'] = ['*'];
    $data['table'] = MODULE;
    $data['where'] = ['module_name' => $module_name, 'status !=' => '9'];
    $res = $this->selectRecords($data);

    if ($res != null) {
        $response = 0;
    } else {
        $response = 1;
    }
    echo $response;
    exit;
}

$(document).on('change', '.module_name', function () {
        var that = $(this);
        var module_name = $(this).val();
        var error = 0;
        var base_url = $('#base_url').val();

        $.ajax({
            url: base_url + 'module/check_module',
            type: 'post',
            data: {
                module_name: module_name
            },
            success: function (res) {
                if (res == 0) {
                    that.next('span').html('Module already exist');
                    $('#submit').attr('disabled', 'disabled');
                } else {
                    $('.text-danger').each(function () {
                        var value = $(this).html();
                        if (value != "") {
                            error++;
                        }
                    });

                    if (error == 1) {
                        $('#submit').removeAttr("disabled");
                    }
                    that.next('span').html('');
                }
            }
        });
    });

您可以使用一个 global 变量,该变量随每次 ajax 调用而修改。如果 ajax 响应为零,则将 1 添加到全局 errors 变量中,如果一切正常,则添加 0。

要计算数组是否包含 1 和 0 的混合,有多种方法可以做到这一点,但是 Set 看起来非常简洁,可以与 array.reduce 调用结合使用计算数组中所有元素的总和。如果总和为零,则可以提交表格。

let errors=[];
let col=document.querySelectorAll('input[name="module_name"]');

$( document ).on('change', '.module_name', function(){
    var that = $(this);
    var module_name = $(this).val();
    var base_url = $('#base_url').val();

    $.ajax({
        url: base_url + 'module/check_module',
        type: 'post',
        data: {
            module_name: module_name
        },
        success: function( res ) {
            if( res==0 ) {
                that.next('span').html('Module already exist');
                $('#submit').attr('disabled', 'disabled' );
            }
            errors.push( res==0 );  // add either 1 or 0 depending upon result 

            if(
                // 3 elements?
                errors.length == col.length 
                    &&
                // all the same number?
                new Set( errors ).size==1 
                    &&
                // sum equals zero
                errors.reduce( (a,b)=>a+b )==0 
            )$('#submit').removeAttr("disabled");
        }
    });
});