HTML checkBox onchange не работает - PullRequest
       25

HTML checkBox onchange не работает

7 голосов
/ 09 февраля 2011
<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 ]

20 голосов
/ 25 июня 2011

Bro использовать событие onclick вместо onchange .. Причина ... Согласно ссылкам на Javascript, которые я прочитал, onchange срабатывает после фокус потерян. Если вы не нажмете где-то еще, фокус не теряется в IE. Другие браузеры не должны ждать потери фокуса, прежде чем включение обмена - что говорит о том, что они не следуют спецификации (несмотря на то, что имеет больше смысла стрелять в этот момент). Как насчет использования вместо этого onclick и onkeydown / onkeyup (с помощью обоих onclick и onkeyup / onkeydown вы охватываете настройки мыши и клавиатуры Флажок). СПРАВКА: http://www.winvistatips.com/re-onchange-event-checkbox-not-working-properly-t311364.html

1 голос
/ 09 февраля 2011

Я думаю, проблема отсюда: $('#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"));
    });
});

Этот случай показан в этой демонстрации .

0 голосов
/ 09 февраля 2011

Попробуйте вместо этого использовать if($('#CheckBox' + id + ':checked').length > 0), чтобы jQuery понял, что флажок установлен или нет.

Также, если onChangeProblemCheckBox использует какие-либо внутренние свойства в problemPicker но не ссылается на них с полным путем, то есть problemPicker.nnnnn произойдет сбой, так как событие будет запущено в контексте элемента, а не problemPicker.Это было бы так, как если бы функция была вызвана так $('#CheckBox' + id).onChangeProblemCheckBox().

...