Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery attr() not working on Bootstrap button after reset

I have a very simple code that doesn't work and I don't understand what I'm missing.

External resources

<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>

HTML

<p>
    <button id="btn-id" class="btn btn-large btn-primary" type="button" data-loading-text="loading stuff...">Click Me</button>
</p>

JavaScript

$(document).ready(function () {
    $("#btn-id").button();

    $("#btn-id").click(function () {
        //$("#btn-id").attr("disabled",true);
        $(this).button('loading');

        setTimeout(function () {
            //this desn't work. The button resets but it doesn't get disabled afterwards
            $("#btn-id").button('reset').attr("disabled", true);

            //the bellow line works as expected
            //$("#btn-id").button('reset').addClass("btn-success");
        }, 2000);
    });
});

It seems that after button('reset'), I can addClass('someclass') but I can't disable the button anymore.

Why is this not working and how can I fix it?

jsFiddle

like image 589
Alex Sutu Avatar asked Jul 31 '13 11:07

Alex Sutu


2 Answers

Not sure if this is the right way, but you can use a workaround

$(document).ready(function () {
    $("#btn-id").button();

    $("#btn-id").click(function () {
        $(this).button('loading');
        setTimeout(function () {
            $("#btn-id").addClass('btn-success').data('loading-text', 'OK').button('loading')
        }, 2000);
    });
});

FIDDLE

like image 145
Spokey Avatar answered Sep 18 '22 15:09

Spokey


The problem is the setTimeout used in the Button.prototype.setState() method:

https://github.com/twitter/bootstrap/blob/master/js/bootstrap-button.js#L46

Here is a workaround for this:

var $btn = $('.btn-save');
$btn.button('reset');
setTimetout(function() {
    $btn.attr('disabled', 'disabled'); // Disables the button correctly.
}, 0);

(Fiddle: http://jsfiddle.net/f0t0n/BKXVA/)


Source: https://github.com/twbs/bootstrap/issues/6242
Credit goes to: https://github.com/f0t0n

like image 40
Ra. Avatar answered Sep 18 '22 15:09

Ra.