未捕获错误:在初始化之前无法调用按钮上的方法;试图调用方法' loading'

时间:2015-05-12 12:08:47

标签: javascript jquery

我将jquery-ui放在第一行文件中后跟bootstrap文件后我仍然收到此错误:

  

未捕获错误:在初始化之前无法调用按钮上的方法;试图调用方法' loading'。

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:98)

  

这是由jquery-ui和bootstrap-button插件冲突引起的。在   事实上jquery-ui代码js代码应该在bootstrap.js之前去,那个   解决了这个问题。

     

在bootstrap.js之前插入jquery-ui插件

答案 1 :(得分:2)

另一个解决方案是在bootstrap之后添加这一行:

$.fn.btnBootstrap = $.fn.button.noConflict();

然后在调用加载和重置时:

$btn.btnBootstrap('loading');
$btn.btnBootstrap('reset');

答案 2 :(得分:1)

该答案基本上与其他建议的答案一致:最后加载引导程序。这个答案只会增加更多信息。

在使用Bootstrap 2.3.2和jQuery UI 1.10时,我已经看到了这一点。如bootstrap bug #6094中所述,他们俩都希望实现:

jQuery(selector).button()

因此装载的最后一个“获胜”。

特别是,如果最后一次加载jQueryUI,则此标准引导程序2.3.2按钮组标记不起作用:

<div class="btn-group" data-toggle="buttons-checkbox">
  <button type="button" class="cm-toggle-btn toggles btn btn-mini active" name="foo">
    Foo
  </button>
  <button type="button" class="cm-toggle-btn toggles btn btn-mini active" name="bar">
    Bar
  </button>
</div>

(它创建一个看起来像这样的按钮组:)

button group

当您单击按钮组中的按钮之一时,将调用jQueryUI的.button()并生成Error: cannot call methods on button prior to initialization; attempted to call method 'toggle'错误。

一个人可以更改顺序并最后加载引导程序,但是jQuery UI的$().button()(因此.slider().dialog()也停止了工作)。 :-(

因为,a,我们都需要工作,所以我们这样做了:由于其他原因,我们首先加载jQueryUI很复杂,因此围绕jQueryUI,我们提出:

<script>
    let bootstrapButton = jQuery.fn.button;
</script>

<script src="jqueryUIsource.js"></script>

<script>
    jQuery.fn.jQueryUIButton = jQuery.fn.button;
    jQuery.fn.button = bootstrapButton;
</script>

然后,在需要jQueryUI引导的页面部分中,将.button()临时恢复jQueryUI的jQuery.fn.jQueryUIButton实现(存储在jQuery.fn.button中)。这是一个杂乱的hack,但可以工作。我想如果要在同一个页面上同时加载它们,我们会做得更好。

codepen证明可以投入使用。

答案 3 :(得分:0)

我不知道在什么情况下会出现此消息。使用此代码时,我也遇到了类似的情况:

HTML:

<button class="btn btn-primary" type="submit" id="update" data-loading-text="Processing <i class='fa fa-spinner fa-spin'></i>">Przelicz <span class="glyphicon glyphicon-play-circle"></span></button>

JAVASCRIPT:

$('body').on('click', '#update', function(e) {
var $this = $(this);
$this.button('loading');
setTimeout(function() {
    $this.button('reset');
}, 8000);
}

我以不同的方式解决了这个问题:

JAVASCRIPT:

$('body').on('click', '#update', function(e) {
var html = $(this).data('loading-text');
$(this).html(html);
}

我认为,如果不能100%解决您的问题,可能会以另一种方式解决该问题。

答案 4 :(得分:0)

我使用的引导主题不允许我重新调整bootstrap.js和jquery-ui.js ...虽然发现了,但我的问题是我有一个buttonset()并且两个div都包含单选按钮和单选按钮的名称相同!我从按钮集div中删除了该名称,它可以正常工作。