I have a very simple code that doesn't work and I don't understand what I'm missing.
<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>
<p>
<button id="btn-id" class="btn btn-large btn-primary" type="button" data-loading-text="loading stuff...">Click Me</button>
</p>
$(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
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With