如何判断是否实际点击了复选框?

时间:2011-11-20 05:23:35

标签: javascript jquery

我有多个输入的绑定。

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() {
   // do something here
   // do something extra here if $(this) was actually clicked
});

由于还有其他方法可以启动输入更改,(jquery的.change()方法),有没有办法判断是否实际点击了复选框以导致更改事件?

我尝试了焦点但是焦点事件在复选框的更改事件之前触发,因此不起作用。

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() {
   // do something here
   if($(this).is(":focus")) // do something extra here but focus doesn't happen here for checkboxes.
});

编辑#1

抱歉,我真的不知道如何进一步澄清......我不在乎是否选中了复选框...我知道.is(“:checked”)是什么以及如何使用它。这没有用。我只想知道是否实际点击了复选框以触发更改事件。

编辑#2

我有一个解决方法......我首先绑定点击输入并选择并存储元素的id。然后在我的更改绑定中,我检查更改的元素是否与上次单击的元素相同。

$("input, select").click(function() {
    var myId = $(this).attr("id");
    lastClickedStore.lastClicked = myId;
});

然后在更改绑定中,我只检查当前ID是否等于最后点击的Id。

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() {
   // do something
   if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else.
}

6 个答案:

答案 0 :(得分:10)

绑定到click而不是change。使用键盘更改复选框状态时,仍会触发click事件,但在这种情况下,event.pageXevent.pageY将为0,因此您可以写:

$("#foo, #bar, #fooCheckbox, #barCheckBox").click(function(event) {
    // Do something here...
    if (event.pageX > 0) {
        // Check box was clicked, do something extra here...
    }
});

答案 1 :(得分:1)

FrédéricHamidi回答很好。但是如果你想以编程方式提出事件“改变”,那么不幸的是,他的代码将不起作用。如果您真的想要您所描述的内容,请尝试以下版本:

$('#foo, #bar').bind({
    click: function () {
        alert('click ' + this.id);
        if ($(this).hasClass('changed')) {
            alert('click+change ' + this.id);
            $(this).removeClass('changed');
        }
    },
    change: function () {
        alert('change ' + this.id);
        $(this).addClass('changed');
    }
});

Demo

答案 2 :(得分:0)

if($(this).is(':checked'))....

if($(this).attr('checked'))...

编辑:此外,如果所有复选框都是“家庭”,请确保只能通过为每个项目定义name = the-same-for-all-items和id =不同的项目来检查一个。

Ex:

<input type='checkbox' name='fruits' id='orange' >orange
<input type='checkbox' name='fruits' id='melon' >melon
<input type='checkbox' name='fruits' id='banana' >banana
<input type='checkbox' name='fruits' id='apple' >apple   
<input type='checkbox' name='fruits' id='...' >....

EDIT: if it was clicked: the id?

console.log($(this.id));

答案 3 :(得分:0)

你可以试试吗:

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("click", function() {
   // do something here
   if($(this).is(":checked")) // do something extra here but focus doesn't happen here for checkboxes.
});

希望有所帮助

答案 4 :(得分:0)

所以这就是我如何解决这个问题。我首先绑定输入的点击,然后选择并存储元素的id。然后在我的更改绑定中,我检查更改的元素是否与上次单击的元素相同。

$("input, select").click(function() {
    var myId = $(this).attr("id");
    lastClickedStore.lastClicked = myId;
});

然后在更改绑定中,我只检查当前ID是否等于最后点击的Id。

$("#foo", "#bar", "#fooCheckbox", "#barCheckBox").bind("change", function() {
   // do something
   if(lastClickedStore.lastClicked == $(this).attr("id")) // do something else.
}

答案 5 :(得分:-1)

试试这个:

<input type="checkbox" onClick="doSomething()">

  or

$("#foo","#bar","#fooCheckbox","#barCheckBox").click(function(){
    doSomething();
});