Javascript计数错误

时间:2016-01-10 22:50:25

标签: javascript html

我创建了一个javascript计算器,我使用了变量,但它不起作用 我尝试使用document.getElementById("box1").value而不仅仅是v1而且我看到有些内容发生了变化,如果我输入1111我得到了11 + 11,它有什么不同,为什么? 我不知道是什么问题,我尝试了一些事情但没有改变。

这是我的代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>JS calculator</title>
</head>
<body>
	<input id="box1" type="text" placeholder="Number one" />
	<select name="" id="select">
		<option value="+">+</option>
		<option value="-">-</option>
		<option value="*">*</option>
		<option value="/">/</option>
	</select>
	<input id="box2" type="text" placeholder="Number two" />
	<button onclick="count()">Check</button>
	<a id="output"></a>
	<script>
	var v1 = document.getElementById("box1").value;
	var v2 = document.getElementById("box2").value;
	var sel = document.getElementById("select").value;
	var out = document.getElementById("output").innerHTML;
	function count() {
		if (sel === "+") {
			out = v1 + v2;
		}
		else if (sel === "-") {
			out = v1 - v2;
		}
		else if (sel === "*") {
			out = v1 * v2;
		}
		else if (sel === "/") {
			out = v1 / v2;
		}
		else {
			out = "Error Error Error!"
		}
	}
	</script>
</body>
</html>

谢谢! :)

4 个答案:

答案 0 :(得分:1)

您的脚本中有3个问题。

首先,你应该在count()函数中获取元素值(因为你想在每次有人点击检查按钮时读取这些值)。

其次,你不应该读取输出值而是写它。

第三,必须将输入值转换为int,以避免类似:1 + 1 = 11。

function count() {
  var v1 = parseInt(document.getElementById("box1").value);
  var v2 = parseInt(document.getElementById("box2").value);
  var sel = document.getElementById("select").value;
  var out;
  if (sel === "+") {
    out = v1 + v2;
  } else if (sel === "-") {
    out = v1 - v2;
  } else if (sel === "*") {
    out = v1 * v2;
  } else if (sel === "/") {
    out = v1 / v2;
  } else {
    out = "Error Error Error!"
  }
  document.getElementById("output").innerHTML = out;
}

Here is a fiddle with an example solution

答案 1 :(得分:1)

您的代码中存在多个错误。

a)方法count()中的代码无法看到用户输入的值,因为在用户有机会写入内容之前,会立即执行设置其值的代码。

b).innerHTML返回的值只是一个值,它不是你可以更新的东西。您需要在HTML元素

上设置innerHTML
document.getElementById("output").innerHTML = out; 

c)从.innerHTML读取的值是字符串,因此总和将计算字符串的串联而不是您想要的。乘法根本不起作用。

答案 2 :(得分:1)

您的代码存在多个问题:

  • 您必须在v1中分配v2selcount(),否则只会在页面加载时设置一次

  • 变量out会在您的代码中被覆盖。您应该像这样分配:

var out = document.getElementById("output");

out.innerHTML = "foo";

  • 您必须使用parseInt()
  • 将输入值从string转换为int

你可以在这里找到一个JSBin:http://jsbin.com/hotoletore/edit?html,js,output

祝你好运算计:)

答案 3 :(得分:0)

function count() {
    var v1 = document.getElementById("box1").value;
    var v2 = document.getElementById("box2").value;
    var sel = document.getElementById("select").value;
    if (sel === "+") {
         document.getElementById("output").innerHTML = +v1 + +v2;
    }
    else if (sel === "-") {
         document.getElementById("output").innerHTML = parseInt(v1 - v2);
    }
    else if (sel === "*") {
         document.getElementById("output").innerHTML = parseInt(v1 * v2);
    }
    else if (sel === "/") {
         document.getElementById("output").innerHTML = parseInt(v1 / v2);
    }
    else {
         document.getElementById("output").innerHTML = "Error Error Error!"
    }
}

如果您在v1函数之前放置v2selcount(),则初始值为空,空和+。

您必须使用parseInt解析整数输出。

请注意+v1将字符串直接转换为int。

https://jsfiddle.net/9pwb2yfe/