You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FormValidation的onStatusChanged无法访问类实例变量如何解决

问题原因

你遇到的报错是this指向变更导致的:onStatusChanged使用普通函数声明时,函数内部的this不再指向MedValidation类的实例,而是指向了FormValidation的FieldStatus插件内部上下文,所以无法访问到this.valid_form_submit_btn属性。

可用解决方案

方案1:使用箭头函数(最推荐)

ES6 箭头函数不会创建独立的this上下文,会继承外层作用域的this,直接替换普通函数声明即可:

fieldStatus: new FormValidation.plugins.FieldStatus({
    // 替换为箭头函数
    onStatusChanged: (areFieldsValid) => {
        console.log("test fieldStatus");
        console.log(areFieldsValid);
        console.log(this.valid_form_submit_btn);
        if (areFieldsValid) {
            this.valid_form_submit_btn.removeAttribute("disabled");
        } else {
            this.valid_form_submit_btn.setAttribute("disabled", "disabled");
        }
    },
}),

方案2:提前缓存this引用

如果需要兼容不支持箭头函数的运行环境,可以在init函数开头先缓存类实例的this指向:

init() {
    // 缓存类实例的this
    const _this = this;
    this.valid_fv = FormValidation.formValidation(
        this.valid_form, {
        plugins: {
            trigger: new FormValidation.plugins.Trigger({delay:0.5}),
            submitButton: new FormValidation.plugins.SubmitButton(),
            bootstrap: new FormValidation.plugins.Bootstrap(),
            icon: new FormValidation.plugins.Icon({
                valid: "fa fa-check",
                invalid: "fa fa-times",
                validating: "fa fa-refresh",
            }),
            fieldStatus: new FormValidation.plugins.FieldStatus({
                onStatusChanged: function (areFieldsValid) {
                    if (areFieldsValid) {
                        _this.valid_form_submit_btn.removeAttribute("disabled");
                    } else {
                        _this.valid_form_submit_btn.setAttribute("disabled", "disabled");
                    }
                },
            }),
        },
    });
}

方案3:使用bind绑定this

通过Function.prototype.bind手动把回调函数的this绑定为当前类实例:

fieldStatus: new FormValidation.plugins.FieldStatus({
    onStatusChanged: function (areFieldsValid) {
        console.log("test fieldStatus");
        console.log(areFieldsValid);
        console.log(this.valid_form_submit_btn);
        if (areFieldsValid) {
            this.valid_form_submit_btn.removeAttribute("disabled");
        } else {
            this.valid_form_submit_btn.setAttribute("disabled", "disabled");
        }
    }.bind(this), // 绑定当前类实例的this
}),

内容的提问来源于stack exchange,提问作者Ashish Kularia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:12:00