Изменение атрибута jquery, кажется, не работает - PullRequest
1 голос
/ 31 марта 2011

У кого-нибудь есть идеи, почему этот код не работает? Что я делаю не так?

Используется JQuery 1.5.1.

JS код:

$('#search_filters #discipline a').click(function(){

    var checkbox = $(this).next(':checkbox');

    if (checkbox.attr('checked')) {
        checkbox.attr("checked", true);
    } else {
        checkbox.attr("checked", false);
    }

    $(this).children('img').toggleClass("active");

    return false;
});

HTML:

<li>
    <a href="#">
        <img class="inactive" alt="Football" src="/images/disciplines/e9bc7681813110c/thumb.png">
    </a>
    <input type="checkbox" name="search_discipline[7]" value="1" class="search_discipline">
</li>

Ответы [ 4 ]

1 голос
/ 25 апреля 2011

Я просто столкнулся с этим сам. Кажется, в jQuery 1.5.1 и 1.5.2 установка атрибута checked немного ошибочна. Мне повезло больше с $(':checkbox').val(boolean) (что даже немного проще).

Обновление: после некоторого копания кажется, что инспектор webkit на самом деле не показывает атрибут checked в DOM, но jQuery читает / записывает его правильно. Очень странно. Подходит для использования ночных сборок webkit для разработчика.

1 голос
/ 31 марта 2011

Всего две полезные идеи для проверки изменения атрибутов:

  • Сначала напишите простой HTML без Javascript. Это сработало? Если так, то напишите это с помощью JS
  • Если вы изменили html-тег, вызовите сам атрибут, чтобы вы могли проверить, что ваш код был выполнен правильно. Например alert($({your target object}).attr({the attribute which added}));

Это то, что я делаю в большинстве случаев.

1 голос
/ 31 марта 2011

Значение «проверенного» атрибута должно быть «проверено»:

if (checkbox.is(':checked'))
{
    checkbox.attr("checked", "checked");
} else {
    checkbox.removeAttr("checked");
}
0 голосов
/ 31 марта 2011

Некоторые указатели:

  1. $('#search_filters #discipline a') будут выбирать все a элементы, которые происходят от #discipline, которые происходят от #search_filters.Это то, что вы получили?

  2. Вы помните, что .next() возвращает родного брата.

  3. Что произойдет, если вы удалите href='#'?

  4. Ваше событие клика даже срабатывает?

...