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

如何将函数返回值作为jQuery ROButton插件的lockout参数

问题分析与解决方案

问题出在你传递lockout: flagFunction()的方式上:这行代码会在插件初始化时立即执行flagFunction(),把当时的返回值作为lockout的固定值存入options。如果flagFunction的返回值是动态变化的(比如依赖后续的状态变更),后续点击按钮时lockout不会重新获取最新值,自然不符合预期。

要实现动态判断lockout状态,需要修改插件逻辑,让它支持lockout参数为函数类型,在每次点击时再执行函数获取最新的布尔值。

1. 修改ROButton插件代码

调整点击事件中的lockout判断逻辑,增加对函数类型的处理:

(function($) {
    $.fn.extend({
        ROButton: function(options) {
            var defaults = {
                onClick : function() { return false; },
                lockout : true,
                self: this
            };
            options = $.extend({}, defaults, options);
            return this.each(function() {
                $(this).button().on("click", function() {
                    // 新增:判断lockout是否为函数,是则执行获取最新值
                    const lockoutStatus = typeof options.lockout === 'function' 
                        ? options.lockout() 
                        : options.lockout;
                    
                    if (options.onClick() !== false && lockoutStatus) {
                        //Specialized lockout code
                        // 注意:直接重置options为defaults可能丢失自定义配置,建议单独重置lockout
                        options.lockout = defaults.lockout;
                      }
                });
            });
        }
    });
})(jQuery);

2. 修改插件调用方式

传递函数引用而非执行结果(去掉括号),让插件在点击时才执行flagFunction获取最新值:

$("button.saveBtn").ROButton({
    onClick: function() {
        //onClick details
    },
    lockout: flagFunction // 这里不要加(),传递函数本身
});

这样每次点击按钮时,都会调用flagFunction()获取最新的布尔值,再判断是否执行锁定逻辑,就能达到你想要的动态效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:31:23