1

下面的 javascript 和 jquery 代码有两个问题。jquery 每个循环仅迭代一次,它获取具有正确 ID 的第一个元素执行它需要执行的操作并停止。

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

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?

4

3 回答 3

4

一个id页面上应该只出现一次。如果您想拥有多个具有相同 id 的元素,请使用 a class,而不是 a id

您的each循环迭代器只有一次,因为您正在选择,id因此您只选择页面中的一个元素。如果您将元素更改为 aclass它应该像您期望的那样工作。

于 2013-03-12T12:34:10.890 回答
1

jquery 每个循环仅迭代一次,它获取具有正确 ID 的第一个元素执行它需要执行的操作并停止。

是的,这绝对适合您使用的代码:

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

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

于 2013-03-12T12:34:24.503 回答
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 是否会将它们组合并认为它们相同。无论哪种方式,您都应该像我所展示的那样使用它,以便您的意图更加清晰。

EDIT: I have removed the $ from your variables (var $checkVal) as on jsFiddle it was causing issues. SO if you do not need those $'s, then remove them. Also, note that testing on jsFiddle indicates that you do not need to change your code (other than possibly removing the $ from your declaration) as javascript appears to consider them the same variable, despite the redeclaration, which I find a bit suprising tbh.

于 2013-03-12T13:36:08.230 回答