7

I want to disable my all input element of a div by applying my custom css class. but i could not find any css attribute which can disable an input element. currently what am i doing

  $('#div_sercvice_detail :input').attr('disabled', true);
 $('#retention_interval_div :input').addClass("disabled"); 

which can disable all input element of div with css attr but i want to apply my custom class for disable all input with some extra css attributes

 $('#retention_interval_div :input').addClass("disabled");

class

.disabled{
color : darkGray;
font-style: italic;
/*property for disable input element like*/
/*disabled:true; */
}    

any suggestion for doing this with jquery without using .attr('disabled', true);?

5
  • 4
    Well, .prop('disabled',true) is how you should do it with the current version of jQuery - which meets your request for a way to avoid the .attr() method. Commented Aug 8, 2012 at 11:26
  • +1 for the .prop('disabled', true) Commented Aug 8, 2012 at 11:27
  • 2
    There is no CSS property to specify disabled. jQuery's .prop() is the better method. Though I'm assuming you want to avoid that as well as attr(). May I ask why? Commented Aug 8, 2012 at 11:29
  • 4
    You can't disable an element with just CSS, but you CAN accept an answer to each of the 8 previous questions you've posted here. Commented Aug 8, 2012 at 11:29
  • possible duplicate of How do I disable form fields using CSS? Commented Jul 5, 2014 at 12:06

6 Answers 6

10

There is no way to disable an element with just CSS, but you can create a style that will be applied to disabled elements:

<style>
#retention_interval_div​​ input[type="text"]:disabled { 
    color : darkGray;
    font-style: italic;
}​
</style>

Then in your code you just have to say:

 $('#retention_interval_div :input').prop("disabled", true);

Demo: http://jsfiddle.net/nnnnnn/DhgMq/

(Of course, the :disabled CSS selector isn't supported in old browsers.)

Note that if you're using jQuery version >= 1.6 you should use .prop() instead of .attr() to change the disabled state.

The code you showed is not disabling the same elements that it applies the class to - the selectors are different. If that's just a typo then you can simplify it to one line:

$('#retention_interval_div :input').addClass("disabled").attr('disabled', true);
Sign up to request clarification or add additional context in comments.

Comments

7

You can use following css to practically disable the input:

pointer-events: none;

Comments

4

Using normal CSS

.disabled{
    opacity: 0.6;
    cursor: not-allowed;
    pointer-events: none;
}

Comments

2

No. CSS can't disable an input element. CSS is for styling only, it can't do anything else. Also, input will only work with input, don't forget select, textarea, password

1 Comment

The :input selector basically selects all form controls, not just <input type="text">.
1

You need to do 2 things, so why not wrap them in a single function? You could even create a little plugin to do this:

(function ($) {
    $.fn.disableInput = function () {
        return this.each(function(){
            $(this).prop('disabled');
            $(this).addClass('disabled', true);            
        });

    }
})(jQuery);

Then you can call it like this:

$('#myInput').disableInput();

...and even chain it with other stuff, like this:

$('#myInput').disableInput().addClass('otherClass');​

2 Comments

Note that you don't need the .each(), you can say this.prop().addClass().
Don't you mean $(this).prop('disabled', true); And anyway, wouldn't you want disableInput() to have a true/false parameter?
0

You can't disable input elements using css properties. But you can improve your current coding like following

 $('#div_sercvice_detail :input').prop('disabled',true).addClass("disabled");

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.