如何将函数返回值作为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
相关产品推荐
相关产品推荐

