18

Hey iv been looking for a solution using JQuery or by modifying the twitter bootstrap class to prevent a button from performing its onclick action aka disabling it. However the results iv found so far have not performed correctly and mostly only give an appearance of being disabled but still perform correctly:

$("#previous").prop('disabled', true);
$("#next").prop('disabled', true);

The purpose is to prevent swapping tabs when the tab index is too high or too low. Most other solutions seem to contain huge amounts of what is seemingly unnecessary Javascript for a feature that seems relatively simple.

Such as this :

$("#previous").click(function() {
  var me = $(this);
  me.unbind( "click");            
})

Which is supposed to remove the bound function, however would mean also reattaching the event when the tab index increases. Is there a simpler solution available to temporarily disable a button or just prevent the default action from being carried out without removing the event or not displaying the button element?

Any help would be appreciated :)

5 Answers 5

31

If you are using twitter bootstrap there is this exactly behavior already implemented for you.

You just need to change the class .disabled of the element you want to disable.

Like:

$("#previous").addClass('disabled');
Sign up to request clarification or add additional context in comments.

3 Comments

Adding such classes isn't the best idea because the user can easily go to the browser's inspect element and remove this "disabled" class. It's the best to write an additional code with return false.
All javascript codes runs in the user side. Thinking in a user that will inspect using development tools, this user can change almost anything in the javascript logic. This supposed to be only for better feedback, any type of dangerous behavior should be validate in the backend.
Adding the class as @ErickGallani suggests did not remove the click event from the button. What worked for me was doing it the "classic" way: $('#previous').prop("disabled", true);
6

Let me show a simple example. Here, a button becomes disabled once you click it.

<button class="btn btn-danger">Click Me</button>

$('.btn-danger').on('click', function() {

    if ($(this).hasClass('disabled')) {
        return false;
    } else {
        $(this).addClass('disabled');
    }
});

Comments

3

Here is the better way to do this .

$("#previous").prop({disabled: true});

using this actually disables the button ,not only adding a class for faded view

Comments

2

Here is my solution:

Javascript

jQuery.fn.extend( {

    bsButtonSetStatus : function( status ) {
        if ( status ) {
            this.removeClass( 'disabled' );
        } else {
            this.addClass( 'disabled' );
        }
    },

} );

CSS

.btn.disabled,
.btn:disabled {
    -webkit-filter: grayscale(100%); /* Safari 6.0 - 9.0 */
    filter: grayscale(100%);
    opacity: 0.25;
    pointer-events: none;
}

Comments

0

You would have to prevent the default action using event.preventDefault()

$("#previous").click(function(event) {
  //add logic to attach style behavior here or conditionally prevent default
      event.preventDefault();    
});

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.