jquery每个循环只循环一次,如果使用else代码停止

时间:2013-03-12 12:30:19

标签: javascript jquery

我有以下javascript和jquery代码的两个问题。 每个循环的jquery只迭代一次,它得到具有正确ID的第一个元素,它做了它需要做的事情并停止。

第二个问题是,当我在代码中使用else时,每个函数内部的一个,它甚至不会尝试下一个if,它只是退出那里。 我可能做了一些根本性的错误,但是从jquery每个函数和我对其他函数的期望,我都看不到它。

Javascript代码:

var $checkVal;
var $checkFailed;

$("#compliance").live("keypress", function (e) {

 if (e.which == 10 || e.which == 13) {
    var checkID = $(this).parents('td').next().attr('id');
    var checkVal = $(this).val();
    $('#' + checkID).each(function () {
        var cellVal = $(this).text();
        if (checkVal == cellVal) {
            $(this).removeClass("compFail").addClass("compOk");
        } else {
            $(this).removeClass("compOk").addClass("compFail");
            var checkFailed = True;
        }
    });
    if (checkFailed == 'True') {
        (this).addClass("compFail");
    } else {
        (this).addClass("compOk");
    }
 }
});

我怎样才能让每个循环迭代遍历每个元素的所有实例,并将id分配给变量checkID,并让代码在else之后继续,这样它可以做到最后的if?

3 个答案:

答案 0 :(得分:4)

id应该只显示在一次页面上。如果您希望多个元素具有相同的ID,请使用class,而不是id

您的each仅循环播放一次,因为您正在按id进行选择,因此您只选择页面中的一个元素。如果您将元素更改为class,它应该像您期望的那样工作。

答案 1 :(得分:1)

  

每个循环的jquery只迭代一次,它得到第一个元素   使用正确的ID执行它需要做的事情并停止。

是的,这对于您正在使用的代码来说绝对正确:

$('#' + checkID).each(function(){};)

ID属性是唯一的。 DOM中必须只有一个具有给定ID的元素。您的选择器只能匹配一个元素。您正在迭代仅包含1个项目的集合。

答案 2 :(得分:1)

这是为了说明我在评论中所说的内容,这样就不会删除错误的var:

var checkVal;
var checkFailed;

$("#compliance").live("keypress", function (e) {

 if (e.which == 10 || e.which == 13) {
    var checkID = $(this).parents('td').next().attr('id');
    //HERE is the first edit
    checkVal = $(this).val();
    $('#' + checkID).each(function () {
        var cellVal = $(this).text();
        if (checkVal == cellVal) {
            $(this).removeClass("compFail").addClass("compOk");
        } else {
            $(this).removeClass("compOk").addClass("compFail");
            //HERE is the second
            checkFailed = True;
        }
    });
    if (checkFailed == 'True') {
        (this).addClass("compFail");
    } else {
        (this).addClass("compOk");
    }
 }
});

通常情况下,您拥有它的方式会导致编译时错误(使用类似C#的类型语言)来重新声明变量。在这里,我不清楚它是否会被用作局部变量(忽略你的全局变量),或者如果javascript将它们组合起来并认为它们是相同的。无论哪种方式,你都应该像我展示的那样使用它,这样你的意图就更清晰了。

编辑:我已经从你的变量中删除了$(var $ checkVal),因为在jsFiddle上它导致了问题。所以,如果你不需要那些$,那么删除它们。另外,请注意,对jsFiddle进行测试表明您不需要更改代码(除了可能从声明中删除$),因为javascript似乎认为它们是相同的变量,尽管重新声明,我觉得有点令人惊讶tbh。