确认对话框多次触发
confirm dialog box triggers multiple time
我有一个菜单的以下代码,允许用户从给定的选项中进行选择,并将其重定向到该选项的相关内容。还有一个后退按钮,本应将用户返回到菜单,但它首先需要用户确认操作。
现在有一个问题,在确认返回菜单后,如果您选择选择另一个选项,然后返回菜单,它会要求您两次确认。我该怎么解决这个问题?
此外,我如何才能更好地编写case语句块,而不必为每个case编写back按钮函数?
$(document).ready(function() {
$(".option1, .option2, .option3, .option4").hide();
$(".btn").on("click", function() {
$('.menu').hide();
var idName = $(this).attr('id');
switch (idName) {
case "option1":
$('.option1').show();
$(".back_btn").on("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option1').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
case "option2":
$('.option2').show();
$(".back_btn").on("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option2').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
case "option3":
$('.option3').show();
$(".back_btn").on("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option3').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
case "option4":
$('.option4').show();
$(".back_btn").on("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option4').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
};
});
});
ul {
list-style: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
<ul>
<li class="btn" id="option1">
<button>Option 1</button>
</li>
<li class="btn" id="option2">
<button>Option 2</button>
</li>
<li class="btn" id="option3">
<button>Option 3</button>
</li>
<li class="btn" id="option4">
<button>Option 4</button>
</li>
</ul>
</div>
<div class="option1">Content 1
<button class="back_btn">back</button>
</div>
<div class="option2">Content 2
<button class="back_btn">back</button>
</div>
<div class="option3">Content 3
<button class="back_btn">back</button>
</div>
<div class="option4">Content 4
<button class="back_btn">back</button>
</div>
每次单击$(".btn")
时,都会在$(".back_btn")
选择器上创建另一个侦听器。
您可以使用.one
,它将在单击一次后退按钮后删除侦听器。
$(".back_btn").one("click", function()...
$(document).ready(function() {
$(".option1, .option2, .option3, .option4").hide();
$(".btn").on("click", function() {
$('.menu').hide();
var idName = $(this).attr('id');
switch (idName) {
case "option1":
$('.option1').show();
$(".back_btn1").one("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option1').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
case "option2":
$('.option2').show();
$(".back_btn2").one("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option2').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
case "option3":
$('.option3').show();
$(".back_btn3").one("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option3').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
case "option4":
$('.option4').show();
$(".back_btn4").one("click", function() {
if (confirm("Are you sure you want to go back to the menu?")) {
$('.option4').hide();
$('.menu').show();
} else {
//Do nothing
}
});
break;
};
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
<ul>
<li class="btn" id="option1">
<button>Option 1</button>
</li>
<li class="btn" id="option2">
<button>Option 2</button>
</li>
<li class="btn" id="option3">
<button>Option 3</button>
</li>
<li class="btn" id="option4">
<button>Option 4</button>
</li>
</ul>
</div>
<div class="option1">Content 1
<button class="back_btn1">back</button>
</div>
<div class="option2">Content 2
<button class="back_btn2">back</button>
</div>
<div class="option3">Content 3
<button class="back_btn3">back</button>
</div>
<div class="option4">Content 4
<button class="back_btn4">back</button>
</div>
您可以创建两个click()
事件,一个用于所有选项,另一个用于后退按钮,而不是使用各种switch语句,如下所示:
$(document).ready(function () {
$(".option1, .option2, .option3, .option4").hide();
$(".btn").on("click", function () {
$('.menu').hide();
var idName = $(this).attr('id');
$('.' + idName).show();
});
$(".back_btn").on("click", function () {
if (confirm("Are you sure you want to go back to the menu?")) {
$("div[class^='option']").hide();
$('.menu').show();
}
});
});
ul {
list-style: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
<ul>
<li class="btn" id="option1">
<button>Option 1</button>
</li>
<li class="btn" id="option2">
<button>Option 2</button>
</li>
<li class="btn" id="option3">
<button>Option 3</button>
</li>
<li class="btn" id="option4">
<button>Option 4</button>
</li>
</ul>
</div>
<div class="option1">Content 1
<button class="back_btn">back</button>
</div>
<div class="option2">Content 2
<button class="back_btn">back</button>
</div>
<div class="option3">Content 3
<button class="back_btn">back</button>
</div>
<div class="option4">Content 4
<button class="back_btn">back</button>
</div>
此外,您可以使用选择器$("div[class^='option']").hide();
(只是为后退按钮添加的选项),通过以option
开头的类隐藏所有div
元素。
相关文章:
- 删除确认对话框在第一次单击时不起作用
- javascript确认对话框有时会不断出现
- 如何为javascript方法放入jquery确认对话框
- 是否可以将JXBrowser显示的JS确认对话框的结果返回到调用它的JS部分
- 如何在批准露天共享中工作流的审核步骤之前添加确认对话框
- 弹出格式化的模式对话框,并在用户确认时转发
- 为什么JavaScript对话框(警告、确认)会停止页面重绘
- jQuery模态弹出的行为类似于确认和警报对话框
- MVC3 Ajax链接确认对话框使用jquery ui对话框
- 是否可以隐藏javascript确认对话框
- 通过Rails中的自定义Jquery对话框处理链接的确认
- Javascript/C# - 满足语句条件时的确认对话框
- 如何添加Facebook FB.ui对话框确认消息
- 在按下对话框“保存”按钮后创建对话框确认
- 用户不会显示 JQuery 模式对话框确认
- 启动对话框确认单击确认事件
- Jquery对话框确认到一个特定的带有php变量的href链接
- 如何构建一个jQuery对话框确认(是/否),可以在应用程序的任何地方工作
- jQuery对话框确认删除不会触发删除
- 在Code Behind/ASP.net中基于用户输入显示模态对话框/确认框