Html checkBox onchange无法正常工作

时间:2011-02-09 07:46:18

标签: jquery html checkbox onchange

<input class="jProblemClass" id="Checkbox{%= ID %}" type="checkbox" onchange="problemPicker.onChangeProblemCheckBox('{%=ID %}');"/>

首次检查或取消选中后,没有任何反应。第二次点击后,调用我的函数problemPicker.onChangeProblemCheckBox,但我先得到ID。为什么?可以帮助我吗?

onChangeProblemCheckBox: function(id) {
    if ($('#CheckBox' + id).attr("checked") == true) {
        problemPicker.addToCheckProblems(id);

        var checkboxes = $('.jProblemClass:checked');

        if ((checkboxes.length > general.limit) && (general.limit != 0)) {
            alert('The limit of ' + general.limit + ' problems exceeded. Please deselect ' + (checkboxes.length - general.limit).toString() + '.');
        }
    } else {
        problemPicker.delFromCheckProblems(id);
    }
},

3 个答案:

答案 0 :(得分:20)

使用onclick事件代替onchange .. 原因... 根据我读过的Javascript引用,onchange之后会发生火灾 焦点丢失了。除非你点击其他地方,否则焦点不会在IE中丢失。 其他浏览器不能等待焦点丢失 射击onchange - 这表明他们没有正确遵循规范 (尽管在这一点上开火更有意义)。如何使用 改为onclick和onkeydown / onkeyup(通过使用onclick和 onkeyup / onkeydown,你可以覆盖鼠标和键盘设置 复选框)。 参考:http://www.winvistatips.com/re-onchange-event-checkbox-not-working-properly-t311364.html

答案 1 :(得分:1)

我认为问题出在这里:$('#CheckBox' + id).attr("checked") == true。根据HTML规范,当此事件触发时,checked应设置为"checked"。因此,请尝试使用$('#CheckBox' + id).attr("checked") == "checked"甚至$('#CheckBox' + id).attr("checked")等内容。

作为第二种选择,我建议您使用纯jquery来运行您的例程。例如,如果您有<input type="checkbox" id="ac">复选框,则可以使用此jq代码来处理您的例程:

$(document).ready(function() {
    $("input[type=checkbox]").change(function() {
        alert("Am i checked? - " + $(this).attr("checked") + "\nMy ID:" + $(this).attr("id"));
    });
});

此案例显示在this demo

答案 2 :(得分:0)

请尝试使用if($('#CheckBox' + id + ':checked').length > 0),这样您就可以让jQuery知道复选框是checked还是不是。

此外,如果onChangeProblemCheckBox使用problemPicker中的任何内部属性但未使用完整路径引用它们,即problemPicker.nnnnn它将失败,因为事件将在元素的上下文中触发,而不是problemPicker。就像函数被调用一样$('#CheckBox' + id).onChangeProblemCheckBox()