我有一个相当简单的问题。
我override func viewDidLoad() {
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 44
}
的值在进入点击事件时会丢失,operationVal
会返回if(operationVal == 0 )
。但是,如果我在事件之前检查true
它具有所选值。此外,如果我在事件中写operationVal
而不是operation.options[operation.selectedIndex].value
,则抓取的值是正确值。
如果有人解释我为什么会如此,我将不胜感激。我假设它与JavaScript范围有关,但它对我没有意义。
operationVal
答案 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;
});