在jQuery中,我的函数不起作用

In jQuery my function is not work

本文关键字:函数 不起作用 我的 jQuery      更新时间:2023-09-26

我试图像这样用jQuery做两个条件语句。

$('#user_name, #user_email, #user_password').keyup(function () {
    if ($('#output-name').is('.field-output-comple') &&
            $('#output-email').is('.field-output-comple') &&
            $('#output-password').is('.field-output-comple') &&
            $('#confirm-terms-of-use').is(':checked')
    ) {
        $('#register-button').removeAttr('disabled');
    } else {
        $('#register-button').attr('disabled', 'disabled');
    }
});
$('#confirm-terms-of-use').change(function() {
    if ($('#output-name').is('.field-output-comple') &&
            $('#output-email').is('.field-output-comple') &&
            $('#output-password').is('.field-output-comple') &&
            $('#confirm-terms-of-use').is(':checked')
    ) {
        $('#register-button').removeAttr('disabled');
    } else {
        $('#register-button').attr('disabled', 'disabled');
    }
});

但您知道此代码是重复的。

if ($('#output-name').is('.field-output-comple') &&
    $('#output-email').is('.field-output-comple') &&
    $('#output-password').is('.field-output-comple') &&
    $('#confirm-terms-of-use').is(':checked')
) { 
    $('#register-button').removeAttr('disabled');
} else {
    $('#register-button').attr('disabled', 'disabled');
}

所以我用这样的函数制作了这段代码。

$('#user_name, #user_email, #user_password').keyup(isValidPassword())
$('#confirm-terms-of-use').change(isValidPassword())
function isValidPassword() {
    if ($('#output-name').is('.field-output-comple') &&
            $('#output-email').is('.field-output-comple') &&
            $('#output-password').is('.field-output-comple') &&
            $('#confirm-terms-of-use').is(':checked')
    ) {
        $('#register-button').removeAttr('disabled');
    } else {
        $('#register-button').attr('disabled', 'disabled');
    }
}

但它效果不佳。没有错误isValidPassword但剂量可能没有输出任何东西。我哪里犯了错误?感谢您的阅读。

您需要将

函数引用传递给事件处理程序,您正在调用函数isValidPasswordundefined作为事件处理程序传递它返回的值。

$('#user_name, #user_email, #user_password').keyup(isValidPassword)
$('#confirm-terms-of-use').change(isValidPassword)

这不是你想的那样:

.keyup(isValidPassword())

这不会将isValidPassword函数本身传递给keyup,它会执行函数并传递该函数的结果。 并且该函数不返回任何内容,因此其结果为 undefined

不要执行函数,只需将函数本身作为变量传递:

.keyup(isValidPassword)