Справка по функциям jQuery .each - PullRequest
1 голос
/ 15 декабря 2010

Мне было интересно, что я здесь делаю неправильно.Первая функция работает нормально, когда вызывается кнопка сброса, но по какой-то причине вторая функция ничего не делает.Форма действительно сбрасывается, но второе предупреждение никогда не всплывает и класс warn никогда не удаляется.Спасибо за вашу помощь!

$('#registration :reset').click(function() {
    alert("reset was clicked");
    $('#registration :text').each(function() {
        if ($(this).hasclass('warn')) {
            $(this).removeClass('warn');
        }

        if (!$(this).hasclass('texta')) {
            $(this).addClass('texta');
        }

        alert("value");
    });
});

Ответы [ 3 ]

5 голосов
/ 15 декабря 2010

Язык Javascript чувствителен к регистру .Метод hasclass() не существует, но hasClass () существует.Вы должны написать:

$('#registration :text').each(function() {
    if ($(this).hasClass('warn')) {
        $(this).removeClass('warn');
    }

    if (!$(this).hasClass('texta')) {
        $(this).addClass('texta');
    }

    alert("value");
});

Тем не менее, вам обычно не нужно звонить hasClass() перед addClass () или removeClass () , потому что addClass() не добавит дубликат, если элемент уже имеет указанный вами класс, а removeClass() не удалит класс, которого у элемента нет.Таким образом, вы можете просто написать:

$('#registration :text').each(function() {
    $(this).removeClass('warn');
    $(this).addClass('texta');
    alert("value");
});

Или, используя цепочку методов, как @deceze:

$('#registration :text').each(function() {
    $(this).removeClass('warn').addClass('texta');
    alert("value");
});
4 голосов
/ 15 декабря 2010

Попробуйте вместо этого:

$('#registration :text').removeClass('warn').addClass('texta');

Вот как выглядит волшебник jQuery!

Практически каждый метод jQuery работает на каждый элемент, возвращаемый функцией $.Поэтому нет необходимости циклически просматривать все результаты, removeClass и addClass будут применены ко всем элементам, найденным селектором #registration :text.Кроме того, нет необходимости выполнять какую-либо проверку перед удалением или добавлением классов.Если вы добавляете класс, а элемент уже имеет класс, ничего не происходит.И наоборот, для удаления класса.

Попробуйте прочитать учебник , это то, что делает jQuery таким мощным!

1 голос
/ 15 декабря 2010

Попробуйте использовать вживую, так как они добавляются и удаляются,

Я думаю, что когда вы удаляете, они не связаны ..

$('#registration :reset').live('click', function() {
    alert("reset was clicked");
    $('#registration :text').each(function() {
        if ($(this).hasClass('warn')) {
            $(this).removeClass('warn');
        }

        if (!$(this).hasClass('texta')) {
            $(this).addClass('texta');
        }

        alert("value");
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...