Проблема с присвоением класса
Есть список отзывов, структура 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, время: 13:23. |