警报显示两次而不是一次
Alert shows up twice instead of once
我的代码包含两个具有相同类("box")但不同id的div,如下所示:
<div class="box" id="inside1">
<button>Hey</button>
</div>
<div class="box" id="inside2>
<button>Hey</button>
</div>
在每个div中都有一个隐藏的<button>
。单击一个"框"后,两个按钮都会出现。如果用户单击其中一个按钮,则应将消息"嘿"推送到一个阵列(array1
或array2
,具体取决于用户单击的按钮),并且应向该阵列发出警报:
alert(array1[0]); // or alert(array2[0]) depending on button clicked
我的代码运行良好,但问题是,在单击其中一个按钮并获得1个警报后,如果我单击另一个按钮,我将获得2个警报,而不是1个。
这是我的代码:
var array1 = [];
var array2 = [];
$('body').once('click','.box', function() {
$('button').show();
var id = $(this).attr('id');
function x(array) {
$('button').click(function() {
array.push("hey");
y(array);
});
}
function a() {
if (id == "inside1") {
x(array1);
}
if (id == "inside2") {
x(array2);
}
}
a();
});
function y(array) {
alert(array[0]);
}
还有JSFiddle。
看看这个。
function x(array) {
$('button').click(function() {
array.push("hey");
y(array);
});
}
每次调用x方法时都要注册click事件,这是在click事件上执行的。
您应该将click事件处理程序注册移出方法之外。类似
$(function(){
var array1 = [];
var array2 = [];
$('button').click(function() {
alert('clicked');
});
});
您的代码的完整简化版本是
$(function(){
var array1 = [];
var array2 = [];
$('button').click(function() {
var id=$(this).closest(".box").attr("id");
if (id == "inside1") {
y(array1,'hey');
}
else if (id == "inside2") {
y(array2,'hey');
}
});
$('body').on('click','.box', function() {
$('button').show();
});
});
function y(array,val) {
array.push(val);
alert(array[0]);
}
这是一个完整的工作样本。
相关文章:
- 一次点击,两次'单击'事件已启动
- ng在一页中包含两次相同的部分页面
- 变量递增两次而不是一次
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- JQuery定位:我可以滚动到正确的位置一次,但不能滚动两次
- JS函数只需点击一次即可触发两次
- Gulp任务似乎运行了两次,而不是一次
- 在javascript中,如何将相同的对象两次推送到一个数组中,并进行一些修改而不覆盖数组
- 滚动时加载更多 滚动速度时一次工作两次
- 一次两个对象的 JQuery 淡入淡出循环
- 一次两个滑动图像
- 在AngularJS中,一次进行两次调用是一种可接受的方法
- Chrome 确实会加载一次视频文件,但不会加载两次
- 如何修复有时加载两次、一次或根本不加载的 Facebook JSDK
- 有没有一种不那么黑客的方法可以防止我的 on('click') 触发两次
- 为什么 console.log() 被调用两次而不是一次
- 向同一按钮添加两次单击事件只能工作一次
- 如何设置相同的索引两次(一次在每个循环内,另一次在循环外部)
- 我的 JSON 数据使用 AJAX 加载了两次,它只应该在单击时加载一次
- jQuery每次重复上一项两次