gpt4 book ai didi

javascript - 如何覆盖 Bootstrap 插件定义

转载 作者:行者123 更新时间:2023-12-03 11:12:36 25 4
gpt4 key购买 nike

我想对 Bootstrap 3 Button 插件进行一些调整(实际上是修复),但我等不及整个提交代码/拉取请求/批准过程。我也不想直接对 bootstrap.js 文件进行任何编辑。我想我可以添加另一个名为 bootstrap-override.js 的文件,该文件在 bootstrap.js 之后加载,并包含带有我的自定义内容的按钮插件代码的另一个副本,但这不起作用。原始 Buttons 插件中的代码将被触发。

替换已定义的插件的正确模式是什么:

/* ========================================================================
* Bootstrap: button.js v3.3.0
* http://getbootstrap.com/javascript/#buttons
* ========================================================================
* Copyright 2011-2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */


+function ($) {
'use strict';

// BUTTON PUBLIC CLASS DEFINITION
// ==============================

var Button = function (element, options) {
this.$element = $(element)
this.options = $.extend({}, Button.DEFAULTS, options)
this.isLoading = false
}

Button.VERSION = '3.3.0'

Button.DEFAULTS = {
loadingText: 'loading...'
}

Button.prototype.setState = function (state) {
var d = 'disabled'
var $el = this.$element
var val = $el.is('input') ? 'val' : 'html'
var data = $el.data()

state = state + 'Text'

if (data.resetText == null) $el.data('resetText', $el[val]())

// push to event loop to allow forms to submit
setTimeout($.proxy(function () {
$el[val](data[state] == null ? this.options[state] : data[state])

if (state == 'loadingText') {
this.isLoading = true
$el.addClass(d).attr(d, d)
} else if (this.isLoading) {
this.isLoading = false
$el.removeClass(d).removeAttr(d)
}
}, this), 0)
}

Button.prototype.toggle = function () {
var changed = true
var $parent = this.$element.closest('[data-toggle="buttons"]')

if ($parent.length) {
var $input = this.$element.find('input')
if ($input.prop('type') == 'radio') {
if ($input.prop('checked') && this.$element.hasClass('active')) changed = false
else $parent.find('.active').removeClass('active')
}
if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change')
} else {
this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
}

if (changed) this.$element.toggleClass('active')
}


// BUTTON PLUGIN DEFINITION
// ========================

function Plugin(option) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.button')
var options = typeof option == 'object' && option

if (!data) $this.data('bs.button', (data = new Button(this, options)))

if (option == 'toggle') data.toggle()
else if (option) data.setState(option)
})
}

var old = $.fn.button

$.fn.button = Plugin
$.fn.button.Constructor = Button


// BUTTON NO CONFLICT
// ==================

$.fn.button.noConflict = function () {
$.fn.button = old
return this
}


// BUTTON DATA-API
// ===============

$(document)
.on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
var $btn = $(e.target)
if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
Plugin.call($btn, 'toggle')
e.preventDefault()
})
.on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
$(e.target).closest('.btn').toggleClass('focus', e.type == 'focus')
})

}(jQuery);

最佳答案

您需要使用 jQuery.off() 删除原始 Bootstrap 按钮插件的事件处理程序。您需要 .off() 原始按钮插件的每个 .on()。示例:

$('document').off('click.bs.button.data-api focus.bs.button.data-api blur.bs.button.data-api');

关于javascript - 如何覆盖 Bootstrap 插件定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27500266/

25 4 0
文章推荐: javascript - 将事件监听器添加到附加在 d3 中的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com