Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.01.2011, 03:39
Аспирант
Отправить личное сообщение для bayrach Посмотреть профиль Найти все сообщения от bayrach
 
Регистрация: 16.01.2011
Сообщений: 71

Проблема с присвоением класса
Есть список отзывов, структура 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");
Ответить с цитированием
  #2 (permalink)  
Старый 16.01.2011, 04:17
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

откуда такой извращенный способ поиска?
$('#message').has('input:checkbox:checked').addClass("todelete")
Ответить с цитированием
  #3 (permalink)  
Старый 16.01.2011, 13:56
Аспирант
Отправить личное сообщение для bayrach Посмотреть профиль Найти все сообщения от bayrach
 
Регистрация: 16.01.2011
Сообщений: 71

Теперь всё правильно работает только 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');
    });
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2011, 14:22
Аспирант
Отправить личное сообщение для bayrach Посмотреть профиль Найти все сообщения от bayrach
 
Регистрация: 16.01.2011
Сообщений: 71

Проблема решена добавлением перед #message div, то есть:
$("div#message")
, хотя в ранней версии без див работало
x-yuri, спасибо, действительно, ваш метод логичнее и правильнее
Ответить с цитированием
  #5 (permalink)  
Старый 16.01.2011, 15:58
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

минутку, у тебя на странице несколько элементов с одинаковым id? Никогда так не делай
Ответить с цитированием
  #6 (permalink)  
Старый 16.01.2011, 18:59
Аспирант
Отправить личное сообщение для bayrach Посмотреть профиль Найти все сообщения от bayrach
 
Регистрация: 16.01.2011
Сообщений: 71

спасибо, согласен, вот сейчас переделал структуру и получилось примерно следующее: (то что внутри формы генерируется 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");
    }
    });

Можно как-то оптимизировать код? Спасибо.

Последний раз редактировалось bayrach, 16.01.2011 в 19:02.
Ответить с цитированием
  #7 (permalink)  
Старый 16.01.2011, 20:04
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

не обязательно все в одну строку писать:
$(".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");
Ответить с цитированием
  #8 (permalink)  
Старый 16.01.2011, 22:14
Аспирант
Отправить личное сообщение для bayrach Посмотреть профиль Найти все сообщения от bayrach
 
Регистрация: 16.01.2011
Сообщений: 71

спасибо ^)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47