25

I wrote this snippet of javascript/jQuery to change a check box. http://jsfiddle.net/johnhoffman/crF93/

Javascript

$(function() {
    $("a").click(function() {
       if ($("input[type='checkbox']").attr('checked') == "checked")
           $("input[type='checkbox']").removeAttr('checked');
       else
           $("input[type='checkbox']").attr('checked', 'checked');
       return false;
    });

    $("input[type='checkbox']").change(function(){ 
        console.log("Checkbox changed.");            
    });    
});​

HTML

<input type="checkbox" />
<a href="#">Change CheckBox</a>​

Interestingly, clicking the link alters the text box, but does not trigger the form change event that calls the function that logs a message in Chrome Web Developer Console. Why? How do I make it do that?

2

2 Answers 2

26

You need to trigger the change event, .trigger('change'), so that event knows that a change took place.

From http://api.jquery.com/change/:

Description: Bind an event handler to the "change" JavaScript event, or trigger that event on an element.

This method is a shortcut for .on( "change", handler ) in the first two variations, and .trigger( "change" ) in the third.

The change event is sent to an element when its value changes. This event is limited to <input> elements, <textarea> boxes and <select> elements. For select boxes, checkboxes, and radio buttons, the event is fired immediately when the user makes a selection with the mouse, but for the other element types the event is deferred until the element loses focus.

Demo:

http://jsfiddle.net/nPkPw/3/

Using chaining: http://jsfiddle.net/nPkPw/5/
i.e. $("input[type='checkbox']").trigger('change').attr('checked', 'checked');

Sign up to request clarification or add additional context in comments.

4 Comments

seems a little verbose to simulate a click
for future reference, I had to put trigger after the attr so my script to see what the change was.
trigger should occur after the attr change not before $("input[type='checkbox']").attr('checked', 'checked').trigger('change');
Man... wish i could find this 4 hours ago when i was searching - (google are you listening) - "toggle one filter parameter isotop js". Thanks mate.
10

This isn't surprising, but I guess you could as this to the list of non-effect in the msdn.

  • "This event is fired when the contents are committed and not while the value is changing."
  • "The onchange event does not fire when the selected option of the select object is changed programmatically."

You could always just .click() it jsFiddle

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.