JavaScript全局变量值在函数中丢失

时间:2018-02-21 10:19:51

标签: javascript scope

我有一个相当简单的问题。

override func viewDidLoad() { tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 44 } 的值在进入点击事件时会丢失,operationVal会返回if(operationVal == 0 )。但是,如果我在事件之前检查true它具有所选值。此外,如果我在事件中写operationVal而不是operation.options[operation.selectedIndex].value,则抓取的值是正确值。

如果有人解释我为什么会如此,我将不胜感激。我假设它与JavaScript范围有关,但它对我没有意义。

operationVal

4 个答案:

答案 0 :(得分:2)

以下一行:

operationVal = operation.options[operation.selectedIndex].value;

在此代码执行时获取所选值,而不是在用户单击按钮时 future 时获取。

简单的解决方案是在事件监听器回调函数中移动此行。

答案 1 :(得分:0)

  

但是,如果我在事件发生之前检查了operationVal它已经选中了   值。此外,如果我写   operation.options [operation.selectedIndex] .value而不是.value   如果在事件中,抓取的值是正确的值   代替

看起来您的值在click事件

之前已更改
const operationVal = operation.options[operation.selectedIndex].value;

因为上面的行可能是在页面上绑定事件时执行的。

设置operationVal后,当您从下拉列表中选择其他值时,将不会自动刷新

您需要在事件处理程序

中再次设置此值
btn.addEventListener('click', function(argument) {
  //observe this line
  operationVal = operation.options[operation.selectedIndex].value;
  if (regNumbers.test(firstNumber.value) && regNumbers.test(secondNumber.value)) {
    if (operationVal == 0) {
      alert(operationVal);
      result = 'Operation has not been chosen';
    } else {
      switch (operationVal) {
        case 'add':
          result = 'Result is: ' + (firstNumber.value + secondNumber.value);
          break;
        default:
          // statements_def
          break;
      }
    }
  } else {
    result = 'Number entry is not correct.';
  };

  display.innerHTML = result;
});

答案 2 :(得分:0)

用户在设置时未选择operarionVal。因此,您必须将归因const operationVal = operation.options[operation.selectedIndex].value;放在函数中。

答案 3 :(得分:0)

加载页面时设置

operationVal值。当您的选择框值发生变化时,不会更新 因此operationVal的值保持不变

你需要移动

const operationVal = operation.options[operation.selectedIndex].value;

单击事件列表器可以解决问题

const firstNumber = document.getElementById('tbFirstNumber');
const secondNumber = document.getElementById('tbSecondNumber');
const operation = document.getElementById('ddlOperation');
let operationVal = operation.options[operation.selectedIndex].value;
const btn = document.getElementById('btnExecute');
const display = document.getElementById('display');

let result = '';

const regNumbers = /[0-9]{1,}/;

btn.addEventListener('click', function(argument) {
  if (regNumbers.test(firstNumber.value) && regNumbers.test(secondNumber.value)) {
    operationVal = operation.options[operation.selectedIndex].value;
    if (operationVal == 0) {
      alert(operationVal);
      result = 'Operation has not been chosen';
    } else {
      switch (operationVal) {
        case 'add':
          result = 'Result is: ' + (firstNumber.value + secondNumber.value);
          break;
        default:
          // statements_def
          break;
      }
    }
  } else {
    result = 'Number entry is not correct.';
  };

  display.innerHTML = result;
});