在javascript中对IF中的多个或语句进行分组

时间:2010-12-25 23:41:44

标签: javascript jquery

以下代码有效:

$(".valClear").each(function () {
        if ($(this).val().indexOf(".png") == -1) {
            $(this).val('');
        }
    });

然而,这不会(即使它包含.png或.jpeg也会删除该值),我做错了什么?

$(".valClear").each(function () {
        if (($(this).val().indexOf(".png") == -1) || ($(this).val().indexOf(".jpeg") == -1)) {
            $(this).val('');
        }
    });

4 个答案:

答案 0 :(得分:3)

你正在做一个OR,好像你想要AND,就像这样:

$(".valClear").each(function () {
    if (($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)) {
        $(this).val('');
    }
});

使用OR逻辑,该值可能没有其中任何一个,并且其他部分将为true,您需要AND,这意味着它具有两者都没有。

你也可以稍微优化一下,如下:

$(".valClear").each(function () {
  var val = $(this).val();
  if ((val.indexOf(".png") == -1) && (val.indexOf(".jpeg") == -1)) {
    $(this).val('');
  }
});

从这个问题和你的实际问题中偏离了一点......我实际上改变了你的方式,使用一系列允许的扩展和$.inArray()来检查它,就像这样:

var allowedExtensions = ["png", "jpeg", "bmp"];
$(".valClear").each(function () {
  if ($.inArray($(this).val().split('.').pop(), allowedExtensions) == -1) {
    $(this).val('');
  }
});

You can test it here。您可以从格式中看到,这是很多更容易扩展,以便以后允许其他扩展。

答案 1 :(得分:2)

您必须使用AND

($(this).val().indexOf(".png") == -1) && ($(this).val().indexOf(".jpeg") == -1)

如果字符串以.jpeg结尾,则第一个表达式将评估为true true OR false == true(第二个表达式甚至不会被评估)。

另一个选择是否定整个表达式(并测试.png.jpeg是否包含而不是不包含:< / p>

!($(this).val().indexOf(".png") > -1) || ($(this).val().indexOf(".jpeg") > -1))

答案 2 :(得分:1)

考虑第二次if测试。就像这样说:

  

如果您提供给我的晚餐烤鸡冷火腿,那么我会有一些

在那种情况下,你可能会得到一些冷火腿,或者你可能会得到烤鸡肉。为什么?因为烤鸡不是冷火腿,而且因为冷火腿不是烤鸡。只要你得到的不是烤鸡或不是冷火腿,你说你对厨房准备好了什么都没问题,所以两者中的任何一个都满足条件。

如果您使用而不是来说明限定符,那么厨房必须使用剩​​下的土豆泥来创作。

答案 3 :(得分:1)

这是和/或条件的替代方案。如果该值与正则表达式不匹配,那么..

$(".valClear").each(function () {
  if ( !$(this).val().match(/\.(png|jpeg)/) ) {
    $(this).val('');
  }
});