Проблема с присвоением класса
Есть список отзывов, структура html такая (генерируется php кодом):
<div id="message"> <input type="checkbox" name="msg_id[]" value="id"><span>msg_text...</span> </div> Необходимо, чтобы каждому диву содержащему в себе выделенный чекбокс присваивался класс .todelete. Вот код, который работает в 1.3.2. Сейчас обновился до 1.4.4 и этот код уже не работает.
$("#message input:checkbox:checked").parents("#message").addClass("todelete");
|
откуда такой извращенный способ поиска?
$('#message').has('input:checkbox:checked').addClass("todelete")
|
Теперь всё правильно работает только 1 раз, при 2-й попытке удаления, удаление происходит в бд, а на экране блоки #message не исчезают, смотрю через firebug и действительно блокам #message не присвоен класс .todelete.
вот код:
$("span.loader").ajaxStart(function(){
$(this).show();
$("#message").has("input:checkbox:checked").addClass("todelete");
$("#del_btn:input").attr({disabled: 'disabled'});
});
formData = $('#msg_form input:checkbox').serialize();
$.post('admin/guestbook.php', formData, function(res){
var json = eval("("+res+")");
$("span.loader").hide();
$(".todelete").animate({opacity:'hide'},"slow");
$("span.res").html(json.status);
$('#msg_form').trigger('reset');
$("#del_btn:input").removeAttr('disabled');
});
|
Проблема решена добавлением перед #message div, то есть:
$("div#message")
, хотя в ранней версии без див работало ;)x-yuri, спасибо, действительно, ваш метод логичнее и правильнее |
минутку, у тебя на странице несколько элементов с одинаковым id? Никогда так не делай ;)
|
спасибо, согласен, вот сейчас переделал структуру и получилось примерно следующее: (то что внутри формы генерируется php кодом)
<input type="checkbox" id="check_all" name="id" value="">On/Off All <form id="msg_form" action="#"> <div id="message<?=$id;?>" class="msg_row"> <input type="checkbox" class="checkbox" name="id_msg[]" value="<?=$id?>"> <div class="author">name</div> <div class="msg_text">msg...</div> </div> Необходимо, чтобы при выделении чекбокса или чекбоксов менялся фон блока/блоков с классом msg_row. Решил проблему, но как мне кажется извратившись:
/* Включение/отключение всех чекбоксов */
$("#check_all").click(function(){
if (!$(this).is(":checked"))
$(".checkbox").removeAttr("checked").parents(".msg_row").removeClass("select_row");
else
$(".checkbox").attr("checked","checked").parents(".msg_row").addClass("select_row");
});
/* Выделение блоков содержащих выделенный чекбокс */
$("#msg_form input:checkbox").click(function(){
if ($(this).is(":checked")) {
$(this).parents(".msg_row").addClass("select_row");
}
else {
$(this).parents(".msg_row").removeClass("select_row");
}
});
Можно как-то оптимизировать код? Спасибо. |
не обязательно все в одну строку писать:
$(".checkbox").removeAttr("checked");
$(".msg_row").removeClass("select_row");
попробуй будет ли работать так:
$(".checkbox").attr("checked", true)
есть closest:
$(this).closest(".msg_row").addClass("select_row");
а еще можно делать так:
var f = $(this).is(':checked') ? 'addClass' : 'removeClass';
$(this).closest(".msg_row")[f]("select_row");
|
спасибо ^)
|
| Часовой пояс GMT +3, время: 16:39. |