【问题标题】:jquery each() only looping through asp.net gridview oncejquery each() 只循环一次asp.net gridview
【发布时间】:2013-09-05 15:14:42
【问题描述】:

我正在尝试遍历 gridview 并向用户发出警报,如果他们没有填写他们检查过的项目的数量。但它只适用于第一个复选框,它不会返回 false,因为代码仍然在服务器端执行。

function GetCheckedRows() {
    var checkBox = $("#flexCheckBoxList")
    var textBox = $("#flexTextBox")
    $("#flexGridView tr").each(function () {
        if ($(checkBox).is(':checked')) {
            if (textBox.val().length === 0) {
                alert("You must specify the amount needed");
                return false;
            }
            else {
                return true;
            }
        }
    });
}

完成!想要显示完成的代码,当某些事情不正确时循环并停止。我必须创建一个变量来停止循环执行。这不仅会检查空值,还会检查它是否是数字。

function GetCheckedRows() {
    var exitSubmit = false;
    $(".gridView tr").each(function (e) {
        var checkBox = $(this).find("input[type='checkbox']");
        var textBox = $(this).find("input[type='text']");
            if (checkBox.is(':checked')) {
                if (textBox.val().length === 0 || !$.isNumeric($(textBox).val())) {
                    exitSubmit = true;
                    return false;
            }
            else {
            return true;
            }
        }
    });
    if (exitSubmit) {
       alert("Please enter a valid amount");
       return false;
}

}

【问题讨论】:

  • 它是因为您使用 id 循环使它们成为类并尝试循环
  • 您发布的功能不足以停止表单发布。它只是返回一个真/假,除非你正确地劫持了点击事件,否则它对 UI 没有任何作用,例如<a href="thing" onclick="return GetCheckedRows();">click!</a>。请发布您的其余代码,特别是 GridView 的 ASPX。
  • 显示 gridview 标记会更方便,恕我直言。
  • @Graham 他没有提到提交表格。验证后他可以做任何事情。
  • 感谢您的快速回复!这是按钮的标记

标签: jquery asp.net gridview


【解决方案1】:

更改您的脚本,以便在使用each()... 找到的行上找到复选框和文本框...

function GetCheckedRows() {
    $("#flexGridView tr").each(function () {
        var $checkBox = $(this).find("input[type='checkbox']");
        var $textBox = $(this).find("input[type='text']");
        if ($checkBox.is(':checked')) {
            if ($textBox.val().length === 0) {
                alert("You must specify the amount needed");
                return false;
            }
            else {
                return true;
            }
        }
    });
}

如果复选框和文本框有类,那么在选择器中使用它们会比在输入中更有意义(因为每行中可能还有其他复选框和文本框 - 我不知道)。

此外,您的问题建议您对多个复选框和多个文本框使用相同的 ID。 ID 必须是唯一的 - 您不能使用它们来选择多个元素,就像使用类一样。

【讨论】:

  • 太棒了!当我将 input[type='textbox'] 更改为 text 时,这解决了我的问题
【解决方案2】:

使用 jquery 上下文选择器选中每行中的 c 复选框,如下所示:

function GetCheckedRows() {
$("#flexGridView tr").each(function () {
var $this = $(this), $checkBox = $("#flexCheckBoxList", $this);
    if ($checkBox.is(':checked')) {
        if (textBox.val().length === 0) {
            alert("You must specify the amount needed");
            return false;
        }
        else {
            return true;
        }
    }
});

}

【讨论】:

    【解决方案3】:

    给你CheckBoxes一个像flexCheckBox和你TextBoxesflexTextBox这样的类

    function GetCheckedRows() {
        var checkBox = null;
        var textBox = null;
        $("#flexGridView tr").each(function () {
            checkBox = $(this).find(".flexCheckBox");
            textBox = $(this).find(".flexTextBox");
            if (checkBox.is(':checked')) {
                if (textBox.val().length === 0) {
                    alert("You must specify the amount needed");
                    return false;
                }
                else {
                    return true;
                }
            }
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2016-09-20
      • 2015-09-28
      • 2016-01-09
      • 1970-01-01
      相关资源
      最近更新 更多