以下代码有效:
$(".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('');
}
});
答案 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('');
}
});