有没有一种方法可以将函数的结果作为参数传递给jQuery函数

zvms9eto  于 2023-10-17  发布在  jQuery
关注(0)|答案(1)|浏览(146)

我有一段jquery代码来为按钮添加onClick功能。它使用另一个类ROButton来处理功能。ROButton看起来如下(某些细节被编辑,因为它们不必要地复杂):

(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() {
                    if (options.onClick() !== false && options.lockout) {
                        //Specialized lockout code
                        options = defaults;
                      }
                });
            });
        }
    });
})(jQuery);

将其附加到按钮的操作如下:

$("button.saveBtn").ROButton({
            onClick: function() {
                //onClick details
            }
        , lockout: false });

我希望能够使用另一个函数的结果作为锁定参数的值。我尝试了如下方法:

$("button.saveBtn").ROButton({
            onClick: function() {
                //onClick details
            }
        , lockout: flagFunction() });

然而,这似乎并不像预期的那样工作。不管flagFunction的返回值是什么(flagFunction本身可以正常工作,并在其他地方使用),这似乎并没有传递预期的布尔值。有没有什么办法可以做到我想做的?
谢谢你的帮助。

qf9go6mv

qf9go6mv1#

检查options.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() {
          let lockout = typeof options.lockout == 'function' ? options.lockout() : options.lockout;
          if (options.onClick() !== false && lockout) {
            //Specialized lockout code
            options = defaults;
          }
        });
      });
    }
  });
})(jQuery);

当你调用函数时,你应该只传递一个对回调函数的引用,而不是立即调用它。

$("button.saveBtn").ROButton({
  onClick: function() {
    //onClick details
  },
  lockout: flagFunction
});

相关问题