Swing был разработан для использования с Key Bindings, которые могут делать то, что вы хотите. Я бы начал с проверки привязки клавиш . Не забудьте прочитать учебник Swing для получения полной информации.
Если это не поможет, см. Global Event Listeners для нескольких предложений.
Используйте change
событие вместо toggle
событие, как такой:
$('input#myId').change(function () {
if ($(this).attr("checked")) {
//do the stuff that you would do when 'checked'
return;
}
//Here do the stuff you want to do when 'unchecked'
});
При использовании change
обработчик событий, предложенный Dreas Grech, является соответствующим, это не работает хорошо в IE 6 & 7, который не стреляет change
событие, пока фокус не размывается (то есть, пока Вы не нажимаете вне области флажка). Как [1 111] говорит QuirksMode, "это - серьезная ошибка".
Вы могли бы хотеть использовать click
обработчик событий, но это не будет работать с перемещением с помощью клавиатуры. Необходимо зарегистрироваться keyup
обработчик также...
См. также этот связанный вопрос .
я еще не нашел хорошее решение перекрестного браузера, которое поддерживает оба щелчка мышью и активацию клавиатуры флажков (и не запускает слишком много событий).
<час> Относительно Вашего решения для проверки, проверяется ли флажок или нет, вместо того, чтобы добавить Ваше собственное checked
класс, можно использовать атрибут HTML checked
:
$('input#myInput').change(function () {
if ($(this).attr("checked")) {
//do stuff if the checkbox is checked
} else {
//do stuff if the checkbox isn't checked
}
});
Любой браузер устанавливает checked
атрибут input
элемент к значению "checked"
, если флажок проверяется и устанавливает его на [1 110] (или удаляет атрибут), если флажок не проверяется.
$('input#myId').toggle(
function(e){
e.preventDefault();
//do stuff
$(this).attr('checked', 'true');
},
function(e){
e.preventDefault();
//do other stuff
$(this).attr('checked', 'false');
}
);
Я сделал похожий подход, но просто использовал проверенный атрибут такие как
//toggles checkbox on/off
$("input:checkbox").change(
function(){
if(!this.checked){
this.checked=true;
}
else{
this.checked=false;
}
}
);
//end toggle
Попробуйте использовать функцию, отличную от jquery:
function chkboxToggle() {
if ($('input#chkbox').attr('checked'))
// do something
else
// do something else
}
затем в вашей форме:
<input id="chkbox" type="checkbox" onclick="chkboxToggle()" />
Это ответ MorningZ (я нашел его здесь ), который имеет смысл:
Часть вам не хватает того, что "флажок" - это объект jQuery, а не checkbox DOM object
поэтому:
checkbox.checked
наверняка вызовет ошибку, потому что нет свойства .checked
jQuery
объект
так:
флажок [0] .checked
будет работать, поскольку первый элемент в массиве jQuery - это объект DOM
Итак, в вашей функции change ()
вы можете использовать
$(this)[0].checked
this worked for me............ check it
$(":checkbox").click(function(){
if($(this).attr("id").split("chk_all")[1])
{
var ty = "sel"+$(this).attr("id").split("chk_all")[1]+"[]";
if($(this).attr("checked"))
{
$('input[name="'+ty+'"]').attr("checked", "checked");
}
else
{
$('input[name="'+ty+'"]').removeAttr("checked");
}
}
})
Попробуйте:
$(":checkbox").click(function(){
if($(this).attr("checked"))
{
$('input[name="name[]"]').attr("checked", "checked");
}
else
{
$('input[name="name[]"]').removeAttr("checked");
}
})