Вам нужно будет проверить значение текста в самом цикле.Причина в том, что если у вас есть значение NaN
в переменном тексте, и вы пытаетесь проверить, если его значение меньше нуля, то есть text < 0
.Он всегда будет возвращать false, что приведет к разрыву цикла while и выполнению оставшегося кода.
Вам нужно будет проверить значение текста переменной в определенной последовательности: 1) Проверьте, неномер или нет 2) Если это число, проверьте, если оно меньше нуля 3) Если оно меньше нуля, проверьте, была ли подсказка отменена или закрыта?4) Если ни то, ни другое, измените значение текста на NaN, что приведет к продолжению цикла.Вот так:
if (!isNaN(text)){
if( text < 0 ){
if(!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE))
text = NaN
}
}
Это будет ваш окончательный код:
function checkNum(){
var ui = SpreadsheetApp.getUi(); // Same variations.
do {
var result = ui.prompt(
'Please fill in',
'Please enter number of people involved',
ui.ButtonSet.OK_CANCEL);
var text = parseInt(result.getResponseText());
var button = result.getSelectedButton();
if (!isNaN(text)){
if( text < 0 ){
if(!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE))
text = NaN
}
}
}
while ((!(button == ui.Button.CANCEL) && !(button == ui.Button.CLOSE) && isNaN(text)));
//var button = result.getSelectedButton();
if (button == ui.Button.OK) {
ui.alert('Number of people wanted: ' + text + '.');
} else if (button == ui.Button.CANCEL) {
ui.alert('Action cancelled.');
return;
} else if (button == ui.Button.CLOSE) {
ui.alert('Action cancelled.');
return;
}
}