我正在学习一些JavaScript,并且尝试制作一个简单的计算器。
总和很好,但是其余操作没有效果。我在做什么错了?
js:
function soma(){
var s1 = parseInt(document.getElementById("valor1").value,10);
var s2 = parseInt(document.getElementById("valor2").value,10);
document.getElementById("resultado").style.display = "block";
if(document.getElementById("btnSoma").onclick){
var soma = s1 + s2;
document.getElementById("resultado").innerHTML = soma;
}else if(document.getElementById("btnSubtrair").onclick){
var subtrair = s1 - s2;
document.getElementById("resultado").innerHTML = subtrair;
}else if(document.getElementById("btnMultiplicar").onclick){
var mult = s1 * s2;
document.getElementById("resultado").innerHTML = mult;
}else if(document.getElementById("btnDividir").onclick){
var div = s1 / s2;
document.getElementById("resultado").innerHTML = div;
}
}
JSFiddle链接:https://jsfiddle.net/y7r1m4nx/和HTML
另外,有人可以解释一下为什么我必须将10放在parseInt中吗?我从Mozilla文档中不太了解。
答案 0 :(得分:1)
您应该在
上设置您的JavaScript。document.getElementById("btnSoma").click(function() {
var add = s1 + s2;
document.getElementById("resultado").innerHTML = add;
});
,并根据需要重复此操作以进行多次,div,减法运算。使用此实现,您无需将soma()作为onclick函数调用。
此外,javascript parseInt
函数可以采用两个参数,即要解析的值和radix
,这是您要处理数字的基础。通常我们以10为底,但是有些程序可能使用不同的基础。
答案 1 :(得分:1)
这是工作代码:
function soma(type){
var s1 = parseInt(document.getElementById("valor1").value,10);
var s2 = parseInt(document.getElementById("valor2").value,10);
document.getElementById("resultado").style.display = "block";
var result;
if (type === '+') {
result = s1 + s2;
} else if (type === '-') {
result = s1 - s2;
} else if(type === '*'){
result = s1 * s2;
}else if(type === '/'){
result = s1 / s2;
}
document.getElementById("resultado").innerHTML = result;
}
<div class="container text-center">
<input name="Valor 1" id="valor1">
<input name="Valor 2" id="valor2"><br>
<button type="submit" onclick="soma('+')" id="btnSoma">Somar</button><br>
<button type="submit" onclick="soma('-')" id="btnSubtrair">Subtrair</button><br>
<button type="submit" onclick="soma('/')" id="btnDividir">Dividir</button><br>
<button type="submit" onclick="soma('*')" id="btnMultiplicar">Multiplicar</button><br>
<p id="resultado">Resultado</p>
</div>
您无法查看该元素以查看单击了哪个元素。
if(document.getElementById("btnSoma").onclick)
您可以传入一些值来确定操作。在示例代码中,我传入一个参数来指示我要执行的操作:
添加:'+',子对象:'-',相乘:'*'并除以:'/'
还有其他方法可以完成此操作,包括让每个onclick
调用不同的函数。
但这应该有所帮助。
答案 2 :(得分:1)
好吧,您的if语句不正确。实际上,您实际上只是在检查是否在您检索的按钮上定义了onClick
。
按照定义,您总是会在第一个if块中结束,因此除了求和之外,您将永远不会做其他事情。它只是一个事件处理程序,用于指示您在实际单击程序时将执行的操作,并将其转发到soma()
函数。
现在,我不会说您似乎在说的语言,因此,将这个问题设为英语会有所帮助,但是我认为躯体意味着总和?
在这种情况下,您可以将4个不同的功能作为起点,以处理相同的输入,但执行不同的操作,例如
// get the element once, the values you can just retrieve when needed
const value1 = document.getElementById('value1');
const value2 = document.getElementById('value2');
const output = document.getElementById('result');
function getValuesFromInput() {
return {
a: parseInt( value1.value ),
b: parseInt( value2.value )
};
}
function setOutput( result ) {
output.innerText = result;
}
function sum() {
const { a, b } = getValuesFromInput();
setOutput( a + b );
}
function subtract() {
const { a, b } = getValuesFromInput();
setOutput( a - b );
}
function multiply() {
const { a, b } = getValuesFromInput();
setOutput( a * b );
}
function divide() {
const { a, b } = getValuesFromInput();
setOutput( a / b );
}
<input id="value1">
<input id="value2"><br>
<button type="button" onclick="sum()">Sum</button><br>
<button type="button" onclick="subtract()">Subtract</button><br>
<button type="button" onclick="multiply()">Multiply</button><br>
<button type="button" onclick="divide()">Divide</button><br>
<span id="result"></span>
这将是最容易转换的版本。如今,人们真的不再使用html内部的onclick
语法,因此您现在宁愿在javascript中附加一个事件,并在那里进行处理,例如
// get the element once, the values you can just retrieve when needed
const value1 = document.getElementById('value1');
const value2 = document.getElementById('value2');
const output = document.getElementById('result');
document.getElementById('btnSum').addEventListener('click', sum);
document.getElementById('btnSubtract').addEventListener('click', subtract);
document.getElementById('btnDivide').addEventListener('click', divide);
document.getElementById('btnMultiply').addEventListener('click', multiply);
function getValuesFromInput() {
return {
a: parseInt( value1.value ),
b: parseInt( value2.value )
};
}
function setOutput( result ) {
output.innerText = result;
}
function sum() {
const { a, b } = getValuesFromInput();
setOutput( a + b );
}
function subtract() {
const { a, b } = getValuesFromInput();
setOutput( a - b );
}
function multiply() {
const { a, b } = getValuesFromInput();
setOutput( a * b );
}
function divide() {
const { a, b } = getValuesFromInput();
setOutput( a / b );
}
<input id="value1">
<input id="value2"><br>
<button type="button" id="btnSum">Sum</button><br>
<button type="button" id="btnSubtract">Subtract</button><br>
<button type="button" id="btnMultiply">Multiply</button><br>
<button type="button" id="btnDivide">Divide</button><br>
<span id="result"></span>
总的来说并不会带来什么,但是您当然可以稍微更改html以允许所有运算符都被处理,并且它最终变得更加有趣,因为您最终可以使用事件参数< / p>
const value1 = document.getElementById('value1');
const value2 = document.getElementById('value2');
const output = document.getElementById('result');
document.querySelectorAll('[data-operator]').forEach( btn => btn.addEventListener( 'click', calculate ) );
function calculate( eventSource ) {
const operator = eventSource.target.getAttribute('data-operator');
if (!operator) {
return;
}
// eval should be used carefully here, but it is just demonstrating what you could get to
output
.innerText = eval( `(${parseInt(value1.value)}) ${operator} (${parseInt(value2.value)})` );
}
<input id="value1">
<input id="value2"><br>
<button type="button" data-operator="+">Sum</button><br>
<button type="button" data-operator="-">Subtract</button><br>
<button type="button" data-operator="*">Multiply</button><br>
<button type="button" data-operator="/">Divide</button><br>
<span id="result"></span>
现在,对于parseInt,第二个参数将是基数,例如
console.log( parseInt( '11', 2 ) ); // input is in binairy format
console.log( parseInt( '11', 10 ) );// input is in decimal format
console.log( parseInt( '11', 16 ) );// input is in hexadecimal format