单个表单按钮错误地触发两个事件侦听器和警报框
Single form button incorrectly triggering two event listeners and alert boxes
最初我设置了多个按钮,如下所示:
<button id="plus" type="button" onclick=assignVarAddition()>+</button>
<button id="minus" type="button" onclick=assignVarSubtraction()>-</button>
这些按钮链接到单独的javascript函数,其中变量firstNumb和secondNumb是从表单输入生成的。如果每个按钮都链接到它自己的函数,alert()只会被调用一次,并带有求和的结果。函数如下
function assignVarAddition() {
var firstNumb = +document.getElementById("Numb1").value;
var secondNumb = +document.getElementById("Numb2").value;
var total = firstNumb + secondNumb;
alert("You added " + firstNumb + " and " + secondNumb + ". The total of these two numbers is " + total);
}
function assignVarSubtraction() {
var firstNumb = +document.getElementById("Numb1").value;
var secondNumb = +document.getElementById("Numb2").value;
var total = firstNumb - secondNumb;
alert("You subtracted " + secondNumb + " from " + firstNumb + " and got " + total);
}
我试图清理和缩短js成一个函数,所以现在我试图在一个函数中使用事件监听器,其中一个单独的事件事件监听器与单独的alert()设置为每个按钮的单击。但当我点击其中一个时,两个警报都会被触发,分别是加法和减法,总和一个接一个地显示在不同的警报框中。现在按钮和功能设置如下:
<button id="plus" type="button" onclick=assignVarAddition()>+</button>
<button id="minus" type="button" onclick=assignVarSubtraction()>-</button>
function assignVarCalc() {
var firstNumb = +document.getElementById("Numb1").value;
var secondNumb = +document.getElementById("Numb2").value;
document.getElementById("plus").addEventListener("click", alert(firstNumb+secondNumb));
document.getElementById("minus").addEventListener("click", alert(firstNumb-secondNumb));
}
我需要做些什么来阻止两个警报同时被调用-以便当"+"按钮被按下时,警报框中只显示Numb1和Numb2的添加?不是加法,然后是减法在它自己的警报。
请注意,我为html和javascript设置了单独的文件,并在html文件中设置了标签
您可以共享相同的函数,每次发送不同的参数'+'或'-'
function assignVarCalc(operation) {
var firstNumb = +document.getElementById("Numb1").value;
var secondNumb = +document.getElementById("Numb2").value;
if(operation=='+'){
alert(firstNumb + secondNumb);
} else{
alert(firstNumb - secondNumb);
}
}
<button id="plus" type="button" onclick="assignVarCalc('+')">+</button>
<button id="minus" type="button" onclick="assignVarCalc('-')">-</button>
<input id="Numb1">
<input id="Numb2">
您还没有删除html中的onclick属性。以及你打算如何触发对assignVarCalc()方法的调用。
您的问题的一个可能的解决方案张贴在这里:https://jsfiddle.net/9f7q8d9u/
document.getElementById("plus").addEventListener("click",
function() { assignVarCalc('plus'); }
);
document.getElementById("minus").addEventListener("click",
function() { assignVarCalc('minus');}
);
function assignVarCalc(operation) {
var firstNumb = +document.getElementById("Numb1").value;
var secondNumb = +document.getElementById("Numb2").value;
if(operation === 'plus') {
return alert(firstNumb+secondNumb);
}
if(operation === 'minus') {
return alert(firstNumb-secondNumb);
}
}
我已经复制了您的代码,并将其放入我的HTML文件中。我只是提醒了"测试"这个词来测试这种情况。看看我的代码:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="Style.css"/>
</head>
<body>
<button id="plus" type="button" onclick=assignVarAddition()>+</button>
<button id="minus" type="button" onclick=assignVarSubtraction()>-</button>
<script>
document.getElementById("plus").addEventListener("click", function(){
alert("Hello World");
});
document.getElementById("minus").addEventListener("click", function(){
alert("Hello World");
});
</script>
</body>
</html>
如您所见,我删除了警报周围的功能。当我这样做时,它对我有效,看看这个例子。我希望这是有效的,这是你正在寻找的。如果它有效,请告诉我,我很乐意听到。
相关文章:
- 单击事件打开两个弹出菜单
- 如何在jQuery中获取两个事件之间的时间差
- GWT-允许鼠标事件在两个叠加画布之间传播
- 如果按下两个不同的键,如何使事件发生(HTML5 Javascript)
- 如何通过一个onclick事件更改两个单独的图像
- 将JQuery单击事件直接指向同一元素的两个
- 使用两个重叠的画布,我可以将鼠标事件传递到底部的画布吗
- 在两个按钮上的单击事件上,使用 jQuery 获取未按下按钮的值
- 从一个套接字发出两个事件
- 在两个元素的 onrender 事件之后执行函数
- 如何在onchange事件中的两个函数之间进行选择
- 如何将两个事件的变量组合为一,作为两者的总和.jquery
- 是否存在添加两个相同事件处理程序的默认行为
- 防止两个默认功能发生,并同时触发第三个事件
- Can-Backbone视图在一个html元素上有两个不同的事件
- btAdd click事件在添加记录后打开两个窗口
- 两个docready()事件正在使用jQuery.tabs();进行激发;
- Meteor:具有两个提交按钮的表单(确定事件处理程序中单击的按钮)
- 为同一标记中的两个不同事件调用两个javascript方法
- 两个文本框事件Javascript