jQuery .each函数帮助

时间:2010-12-15 06:44:41

标签: jquery jquery-selectors

我想知道我在这里做错了什么。调用重置按钮时,第一个函数运行正常,但由于某种原因,第二个函数没有做任何事情。表单确实被重置但第二个警报永远不会弹出,警告类永远不会被删除。谢谢你的帮助!

$('#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 个答案:

答案 0 :(得分:5)

Javascript语言为case-sensitivehasclass()方法不存在,但hasClass()确实存在。你应该写:

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

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

    alert("value");
});

也就是说,您通常不需要在addClass()removeClass()之前致电hasClass(),因为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");
});

答案 1 :(得分:4)

请改为尝试:

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

看看jQuery的ze Magik!

几乎每个jQuery方法都适用于 $函数返回的每个元素。因此,无需遍历所有结果,removeClassaddClass将应用于#registration :text选择器找到的所有元素。此外,在删除或添加类之前无需进行任何检查。如果你要添加类并且元素已经有了类,则没有任何反应。反之亦然,删除课程。

尝试阅读a tutorial,这就是让jQuery如此强大的原因!

答案 2 :(得分:1)

尝试使用live,因为它们会被添加和删除,

我认为当你删除时,他们会被绑定..

$('#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");
    });
});