【问题标题】:Using if else inside Javascript filter function在 Javascript 过滤器函数中使用 if else
【发布时间】:2016-12-27 19:33:15
【问题描述】:

My fiddle

我有这个小提琴。我想在这样的过滤器函数中使用 if else 。我有一个工作但循环似乎没有中断。由于它不会中断,因此将为所有未过滤的条件打印 else 部分。如何打破这个循环?或者有什么更好的主意?

我有两个文本框和一个按钮,当我输入标题和数量并点击添加时,我想检查它是否已经存在于桌子上。如果存在,我想将数量替换为新值。如果它不存在,我想添加带有新标题和数量的新行。检查存在对我来说是个谜,根本不起作用。

$('#btnAdd').click(function () {
        debugger;
        UOMCaption = $('#UOMCaption').val();
        UOMQty = $('#UOMQuantity').val();

        $("#tbluom tr td:first-child").filter(function () {
            if ($(this).text().indexOf(UOMCaption) > -1) {
                $(this).next("td").text("found it");
            }
            else {
                $('#tbluom >tbody').append('<tr><td>' + UOMCaption + '</td><td>' + UOMQty + '</td></tr>');
            }
        });
        $('#UOMCaption,#UOMQuantity').val("");
    });

【问题讨论】:

  • 所以你想在找到第一个元素时打破?
  • 您的小提琴与提供的代码不匹配,为什么?
  • 如果要在找到第一个元素后返回,则在 if 块内添加 return 语句。
  • 有点猜想,但这就是你想要的吗? jsfiddle.net/GEwxw
  • 是的,如果我找到我想打破循环的第一个元素。即使我没有找到循环,我也只想做一次 else 部分。目前 else 部分打印的次数与未通过过滤条件的行数一样多。

标签: javascript jquery filter html-table


【解决方案1】:

如果您希望循环在第一次匹配后中断,请使用

$("#tbluom tr td:first-child").each(function () {
    if ($(this).text().indexOf(UOMCaption) > -1) {
        $(this).next("td").text("found it");
        return false;
    } else {
        $('#tbluom >tbody').append('<tr><td>' + UOMCaption + '</td><td>' + UOMQty + '</td></tr>');
    }
});

【讨论】:

  • return false 不适用于 else 部分,如果表中已经存在三行,则新记录将附加三倍以上..
  • @codebrain 在使用 each 而不是 filter 时应该可以工作。
  • 这个几乎可以工作,但是当我添加相同的 UOMcaption 时,如果无法检查..有什么问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多