开发者

Watch for change of the input[type="checkbox"]

How can I run a function on checkbox change?

I'm trying to write small checkbox replacing function base on that - but I'm doing something wrong.

Code:

(function($) {
    $.fn.checking = function() {
        if ($('.checbox').prop('checked', false) === true) {
            $('.new-checkbox').prop('id', 'unchecked');
        } else {
            $('.new-checkbox').prop('id', 'checked');
        }
    };
})(jQuery);


$(document).ready(function() {

    $('.checkbox').wrap('&开发者_如何学Clt;div class="checkbox-wrapper"></div>');
    $('.checkbox-wrapper').append('<p class="new-checkbox">Blue = Checked, Red = Unchecked</p>');
    $('.checkbox').checking();
    $('.checbox').bind('change', function() {
        $(this).checking();

    });

});

PlayGround: LIVE DEMO


Is this what you want? I am under the impression that you are over-complicating things.

$('input[type="checkbox"]').change(function() {
    alert ("The element with id " + this.id + " changed.");
});


You have some typos and errors in your script.

if($('.checbox').prop('checked', false) === true)
//         ^                   ^^^^^^^^^^^^^^^^^

should be

if(this.prop('checked'))

if($('.checkbox').prop('checked')) would work too of course, but why select the element again, if you already made it a plugin and the element is available via this?

And

$('.checbox').bind('change', function(){
//      ^

should be

$('.checkbox').bind('change', function(){
//      ^

Working demo: http://jsfiddle.net/fkling/yGBAK/40/

That said, it is better (more logical) to add and remove a class than changing the ID of the element.


$('.checkbox').change(function(){
    alert('changed');
})

I usedthe class you placed on the checkbox (.checkbox) for this. It detects a change in the state of the checkbox (this works for other inputs as well)

The example I included alerts 'changed' one the checkbox is clicked or unclicked.

If you want to know if it is checked or not every time then:

$('.checkbox').change(function(){
    if($(this).is(':checked')){
        alert('checked');
    } else {
        alert('not checked');
    }
});


Try this:

$('input[type=checkbox]').change(function() {
    alert("I'm changed!");
});

Or

$('input[type=checkbox]').change(function() {
    if ($(this).is(':checked')) {
        alert('I\'\m --> checked');
    } else {
        alert('I\'\m --> unchecked');
    }
});


In your example the selector uses checbox, should be ".checkbox"

I modified your example so it works: http://jsfiddle.net/yGBAK/41/

I swapped the ids for elements.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜