Чекбоксы и их события
Всем добрый вечер. :)
Посмотрите код. Нужно, чтобы работало так - установка и снятие галочек происходило и при нажатии на квадратик, и при нажатии на слово, и чтобы при этом слово окрашивалось в красный и белый цвет соответственно. Проблема 1 - в IE (в Опере норм работает) При нажатии на слово ничего не происходит (ни цвет не изменяется, ни галочки не ставятся). Проблема 1 - и в Опере, и IE При установке/снятии галочек при нажатии на квадартики цвет слова не изменяется. Возможно, вы спросите зачем через focus - просто если обрабатывать события через click, то галочки почему-то не ставятся! :-?
<html>
<head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("input:checked").next("span").addClass("box");
$("input").focus(function(){
$(this).next("span").addClass("box")
$("input:not(:checked)").next("span").removeClass("box");
return false;
});
});
</script>
<style>
.box {
background:red;
}
</style>
</head>
<body>
<label><input type=checkbox value="yes" /><span>Иванов</span></label><br>
<label><input type=checkbox value="yes" CHECKED="true" /><span>Петров</span></label><br>
<label><input type=checkbox value="yes" /><span>Сидоров</span></label><br>
</body>
</html>
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript">
$(function(){
$("span input").bind("click", function(){
$(this).parent().find("label").toggleClass("box");
}).filter("input:checked").parent().find("label").addClass("box");
});
</script>
<style type="text/css">
.box{
background: red;
}
</style>
</head>
<body>
<span><input id="checkbox1" type="checkbox" name="checkbox1" value="yes" /><label for="checkbox1">Иванов</label></span><br />
<span><input id="checkbox2" type="checkbox" name="checkbox2" value="yes" checked="checked" /><label for="checkbox2">Петров</label></span><br />
<span><input id="checkbox3" type="checkbox" name="checkbox3" value="yes" /><label for="checkbox3">Сидоров</label></span><br />
</body>
</html>
|
или даже так
$(function(){
$("input[type='checkbox']").bind("click", function(){
$("label[for='"+$(this).attr("id")+"']").toggleClass("box");
}).filter("input:checked").each(function(){
$("label[for='"+$(this).attr("id")+"']").addClass("box");
});
});
|
Спасибо.
Я проанализировал ваш код (первый) и понял как он работает. Но так и не пойму - почему не работает мой. :-? |
Проблема 1
смею предположить что ie был 6-ой скорей всего в нем клик по label`у не связывается с input`ом который внутри Проблема 2 изначально неправильный подход реализации задачи используя focus элемент формы может получить фокус и не при клике (при проходе tab`ом) также событие focus не сработает если элемент уже в фокусе а при клике на текст у input`а всегда теряется фокус и тут же он снова его получает также надо учитывать что происходит вперед click или focus и при совершении клика в обработке события focus галочка уже проставлена или еще нет "...просто если обрабатывать события через click, то галочки почему-то не ставятся!" лучше надо было разбираться с click`ом чем создавать обработчик focus и разбираться в нем |
| Часовой пояс GMT +3, время: 03:25. |