Google Apps Script - условный ввод пользователя - подсказка номера - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно получить пользовательский ввод, который должен быть положительным целым числом (целое число).Я выяснил, как продолжать отображать подсказку, если ввод не число, но я не могу понять, как записать условие для числового значения.Вот код.

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();
  }
  while (!(button == ui.Button.CANCEL) && isNaN(parseInt(text)) && !(button == ui.Button.CLOSE));

  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;
  }

Я пробовал, по моему мнению, все возможные комбинации <,>,!, &&, ||, но ничего не получалось ..

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вам нужно будет проверить значение текста в самом цикле.Причина в том, что если у вас есть значение 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;
  }
}
0 голосов
/ 01 февраля 2019
  • Вы хотите выйти из цикла while, только если значение является положительным целым числом.

Если мое понимание верно, как насчет этой модификации?Я думаю, что есть несколько ответов для вашей ситуации.Поэтому, пожалуйста, подумайте об этом как об одном из них.

Модифицированный скрипт:

От:
while (!(button == ui.Button.CANCEL) && isNaN(parseInt(text)) && !(button == ui.Button.CLOSE));
До:
while (!(button == ui.Button.CANCEL) && !(/^[0-9]+$/.test(text)) && !(button == ui.Button.CLOSE));

Ссылка:

Если я неправильно понял ваш вопрос, пожалуйста, сообщите мне.Я хотел бы изменить его.

Редактировать:

В вашем текущем измененном сценарии, например, если введены такие значения, как 123-456 и 123abc, извлекается 123.Это связано с var text = parseInt(result.getResponseText()).

Если вы не хотите этого делать, измените значение var text = parseInt(result.getResponseText()) на var text = result.getResponseText().Таким образом, когда такие значения вводятся, он не выходит из цикла while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...