大家好,我遇到了一个我无法解释的错误。场景如下,我有两个收集信息的输入框。如果没有输入值,我希望If语句处理它并导致中断。输入框还具有一个"x“来关闭该框,该框返回"Cancel”值。我要做的是捕获一个条件,如果没有输入值或通过取消,就会发生中断。现在,问题是谷歌完全忽略了或声明。我每个人都知道,我的IF逻辑可以工作,但是如果加上OR,它就不能识别这种情况。
这是我目前的代码:
var propnumber = Browser.inputBox('Enter RFI/RFQ Number', Browser.Buttons.OK);
if(propnumber != "" || propnumber != 'cancel'){} else{
SpreadsheetApp.getActiveSpreadsheet().toast('You must enter a value')
return
};
var myName = Browser.inputBox("Enter the Component Name",Browser.Buttons.OK_CANCEL);
if(myName != 'cancel')
{
I do something
}
正如我在描述中提到的,我的propnumber条件忽略了or,并且总是接受cancel或空白的值。如果我移除或(X),那么它一次只适用于一个条件。
我相信,这是一件微不足道的事情,任何帮助都值得赞赏。
发布于 2022-09-25 08:48:40
怎么了
代码的以下部分中的逻辑
if(propnumber != "" || propnumber != 'cancel'){
// I assume some code will go here
} else{
SpreadsheetApp.getActiveSpreadsheet().toast('You must enter a value')
return
};
不符合您在这里描述的逻辑:
如果未输入值或通过“取消”,则会发生中断。
考虑一下propnumber
是'cancel'
的情况
propnumber != ""
计算为true
propnumber != 'cancel'
计算为false
因此,代码中的if(... || ...)
条件计算为true
,运行(当前为空的) if
块,而不是运行else
。
如何修复它
选项1:逻辑的直译
如果没有输入值或通过取消,则会发生中断。
将会是
if(propnumber == "" || propnumber == 'cancel') {
SpreadsheetApp.getActiveSpreadsheet().toast('You must enter a value')
return
} else {
// Some action
}
选项2:如果您希望交换if
和else
子句,则必须否定整个条件。因此,这也是可行的:
if(!(propnumber == "" || propnumber == 'cancel')) {
// Some action
} else {
SpreadsheetApp.getActiveSpreadsheet().toast('You must enter a value')
return
}
注意添加的括号和单个否定。
选项3:在现有代码中使用和代替OR。
表达式!(A || B)
在逻辑上并不等同于!A || !B
。相反,它等同于!A && !B
(参见德摩根定律)。因此,这也是可行的:
if(propnumber != "" && propnumber != 'cancel') {
// Some action
} else {
SpreadsheetApp.getActiveSpreadsheet().toast('You must enter a value')
return
}
https://stackoverflow.com/questions/73845312
复制相似问题