繁体   English   中英

为什么不在jQuery中返回我的值?

[英]Why isnt my value being returned in jquery?

我已经在JavaScript中创建了validate()函数,当我调用该方法时,它返回undefined ....代码中的所有内容对我来说都正确,为什么这样做呢?

function validate() {
    var __self = this;
    __self.is_valid = true;

    $(document).on("click", "#login,#create_account", function() {
        var email = $("#email").val(),
            password = $("#password").val();

        if (email == "") {
            $("#email-err-msg").removeClass("hidden").html("Enter an email address");
            __self.is_valid = false;
        } else {
            $("#email-err-msg").addClass("hidden")
        }

        return __self.is_valid;
    });
}

(function logUser() {
    $(document).on("submit", "form", function() {
        var action = $(".action").attr("data-account-action");

        console.log(validate());

        if (!validate()) {
            return false;
        }
    });
})();

您的validate函数从不返回任何内容,因此调用它的结果始终是undefined 你有一个回调到您定义在它的事件处理程序,你有return ,在这一声明,但没有validate

目前尚不清楚为什么每次用户尝试提交表单时都要挂接事件处理程序。 我建议不要这样做。 也许像这样:

function validate() {
    var is_valid = true;

    var email = $("#email").val(),
        password = $("#password").val();

    if (email == "") {
        $("#email-err-msg").removeClass("hidden").html("Enter an email address");
        is_valid = false;
    } else {
        $("#email-err-msg").addClass("hidden")
    }

    return is_valid;
}

(function logUser() {
    $(document).on("submit", "form", function() {
        var action = $(".action").attr("data-account-action");

        return validate();
    });
})();

我删除了click事件处理程序,因为我看不到有任何原因,删除了全局变量__is_valid1并直接从submit处理程序中返回调用validate的结果(因为返回true是无害的)。


1为什么是全局变量? 因为您正在这样调用validate: validate() ,这意味着在调用中, this指向全局对象(除非您使用的是严格模式,在这种情况下它将是undefined ;但是我知道您不是因为您说它返回undefined而不是抛出错误)。 向全局对象添加属性会创建全局变量。

暂无
暂无

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

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