我找到了一种方法来做到这一点,尽管不幸的是它涉及到对 Bootstrap 源的更改。执行实际方法调用的代码如下:
$.fn.modal = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('modal')
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option]()
else if (options.show) data.show()
})
}
要更改这一点,应修改第 7 行(源代码中的第 206 行)以传递最初传递给封闭函数的任何附加参数。此外,必须为 jQuery.each()
函数的每次迭代提供原始参数。这是工作代码:
$.fn.modal = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('modal')
, options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option].apply($this.data('modal'), Array.prototype.slice.call(arguments, 1)); // pass the parameters on
else if (options.show) data.show()
}, arguments) // execute each iteration with the original parameters
}
我仍在尝试确保此更改不会产生任何不良副作用,但到目前为止,一切都按预期工作。欢迎任何更优雅的解决方案。