Установка флажка, установленного с помощью jQuery

Вопрос:

У меня есть два флажка ввода, и я хочу проверить/снять флажки с помощью jQuery:

<input type="checkbox" name="user1" value="1" id="u1" onclick="loadUserCalendar(1)">
<input type="checkbox" name="user2" value="2" id="u2" onclick="loadUserCalendar(2)">

Код JavaScript:

var list = new cookieList("calendar_users");
var users = list.items();
for (var i = 0; i < users.length; i++) {
$('input[name="user' + users[i].substr(1,1) + '"]').attr('checked', true);
console.log('substring: ' + users[i].substr(1,1));
console.log('enabling user ' + users[i]);
}

var users содержат следующие значения: u1,u2. Чтобы получить только идентификатор пользователя, я выполняю подстроку, которая возвращает мне правильный номер, как вы можете видеть ниже в выводе на консоль.

Консольный выход:

substring: 1
enabling user u1
substring: 2
enabling user u2

Я понятия не имею, почему флажки не проверяются при запуске кода. Что я здесь делаю неправильно?

Изменить: Я использую jQuery 1.4.4 из-за причин совместимости, поэтому я использую .attr()

Лучший ответ:

Обработчики событий Inline (onclick="loadUserCalendar(1)") не являются способом jQuery. У вас не должно быть никого в вашем html. Избавьтесь от них и добавьте в свой jquery:

$(function() {
    $('form').on('click',':checkbox', function() {
        loadUserCalendar($(this).val());
    });
});

Но, возможно, вы хотели:

$(function() {
    $('form').on('click',':checkbox', function() {
        $('form :checkbox').attr('checked','checked');
    });
});

Версия jquery 1.ancient:

$(function() {
    $('input[type=checkbox]').live('click', function() {
        // do things
    });
});

Ответ №1

Какую версию jQuery вы используете?

Вы должны попробовать что-то вроде:

$('input[name="user' + users[i].substr(1,1) + '"]').attr('checked', 'checked');

или

$('input[name="user' + users[i].substr(1,1) + '"]').prop('checked', 'checked');

Второй — jQuery 1. 6+

Ответ №2

Когда вы хотите что-то проверить, вы должны сделать следующее:

 $('.myCheckbox').attr('checked','checked');

Ответ №3

Если вы создали флажки динамически, используйте jQuery для метода, поскольку простые функции не смогут получить доступ к этим элементам.

Ответ №4

Что касается инициализации флажков, я бы предложил что-то вроде этого:

$('input[type=checkbox]').each(function(index, box) {
$(box).attr('checked', $.inArray($(box).attr("id"), users) != -1);
});

Оцените статью
TechArks.Ru
Добавить комментарий