这是我的if
声明:
和小提琴:http://jsfiddle.net/setMa/
$('#addamenity').click(function () {
var id = $('.editblock').find('#id').val();
var amenity = $("#amenity").val();
var dataString = {
id: id,
amenity: amenity
};
console.log(dataString);
if (amenity != '' || id != '') {
$.ajax({
type: "POST",
url: "classes/add_amenities.php",
data: dataString,
cache: false,
async: false,
success: function (html) {
$('.editunitamenities').load('classes/display_amenities.php?id=' + id);
}
});
} else {
alert('You must SAVE your changes to the new unit before adding amenities.');
}
});
现在,我的控制台日志清楚地显示了""
的ID是什么?如果我从||
取消if
或将文本字段留空,则效果很好。
答案 0 :(得分:1)
在检查之前,您正在记录它。 变化
var dataString ={id:id,amenity:amenity};
console.log(dataString);
if (amenity != '' || id != '')
{
到
if (amenity != '' && id != '')
{
var dataString ={id:id,amenity:amenity};
console.log(dataString);
并且你想要AND(而不是OR),因为否则你的dataString将包含空格(每当一个空白而另一个空白时)。
答案 1 :(得分:1)
只要条件中的至少一个为true
,逻辑OR运算符就返回true。这意味着,在您的情况下,如果中的任何一个值不为空,则始终会执行if
语句。这意味着即使id
为空,如果amenity
不为空,则语句通过 - 这就是OR完成的内容。
实际上,因为逻辑OR运算符是短路的,所以它甚至不检查id
的值:在表达式(amenity != '' || id != '')
中,左侧被计算。如果它的计算结果为true
,则整个语句变为true
,并评估if
块;右边被忽略了。
如果amenity != ''
的计算结果为false,则OR运算符只返回id != ''
。由于左侧是假的,因此仅右侧将确定整个表达式的值,因此返回的是。如果是true
,则至少一个条件为true
,并评估if
块。如果是false
,则它们都是,并且跳过if
块。
解决方案,如果您真的希望仅对非空ID进行评估,则只检查id:if (id != '')
。事实上,在真实性的JavaScript世界中,你可以简单地说if (id)
,这就是你所需要的。
if (id) {
// do ajax post
}
else {
// log errors
}
答案 2 :(得分:1)
从你的问题我真的不知道你在寻找什么。听起来你对条件测试的评估感到沮丧。逻辑“或”运算符表示“如果其任何条款为真,则该陈述为真”。所以你要检查“舒适”,“id”或两者是否“松散地等于”空字符串。这意味着如果分配了舒适性,id或两者,那么“if”语句块中的任何内容都将被执行。下面有一些示例代码向您展示,但同样,很难说出您的目标是什么。
function aTest (amenity, id) {
aTest.count += 1;
console.log('### Test # ', aTest.count);
console.log('amenity = ', amenity);
console.log('id = ', id);
if (amenity != '' || id != '') {
console.log('amenity, id, or both: ' +
'is not kinda equal to an empty string');
}
}
aTest.count = 0;
aTest('', '');
aTest('', 'x');
aTest('x', '');
aTest('x', 'x');
答案 3 :(得分:-1)
修正了它。
我不确定为什么每个人在我需要AND
时都会建议OR
。如果我只是想让它在两个都空白时失败,我会使用&&
。我知道区别......?
我希望.ajax()
无法运行,无论#amenity
的值如何。我无法弄清楚它为什么不起作用。相反,因为我不在乎#amenity
中的内容,所以我决定检查它为什么?我拿了那张支票,一切正常。
if (id != '')
{
var dataString ={id:id,amenity:amenity};
console.log(dataString);
$.ajax({
type: "POST",
url: "classes/add_amenities.php",
data: dataString,
cache: false,
async:false,
success: function(html)
{
//$('.editunitamenities').html(html);
$('.editunitamenities').load('classes/display_amenities.php?id='+id);
}
});
//$('.editunitamenities').load('.editunitamenities');
}else { alert('You must SAVE your changes to the new unit before adding amenities.'); }