需要确定在 JQuery 移动弹出窗口中单击的按钮并基于此执行操作
Need to determine button clicked in a JQuery mobile popup and perform actions based thereon
我在 JQM 弹出窗口时遇到问题。 弹出窗口有 3 个按钮,在主程序中执行的操作取决于单击哪个按钮。 主程序中的代码运行了不止一次,我不确定为什么。
下面的简单示例使用警报来显示单击了弹出窗口中的哪个按钮。当弹出窗口第一次调用时,它按预期工作,第二次,警报显示两次,第三次,警报显示 3 次,依此类推。
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/jquery.mobile-1.3.2.min.css" />
<script type="text/javascript" charset="utf-8" src="cordova-2.6.0.js"></script>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"/></script>
<script type="text/javascript" src="js/jquery.mobile-1.3.2.min.js"></script>
<script>
function doCustomDialog(text1,button1,button2,button3,callback)
{
$("#customDialog .customDialogDesc").text(text1);
$("#customDialog .customDialogOption1").text(button1).on("click.customDialog", function(){
callback("option1");
});
$("#customDialog .customDialogOption2").text(button2).on("click.customDialog", function(){
callback("option2");
});
$("#customDialog .customDialogOption3").text(button3).on("click.customDialog", function(){
callback("option3");
});
$("#customDialog").popup("open");
}
</script>
</head>
<body>
<div data-role="page" id="mainPage">
<div data-role="content">
<INPUT type="button" id="confirm" value="Save data" />
<div data-role="popup" id="customDialog" data-title="Are you sure?" class="ui-content">
<p class ="customDialogDesc">???</p>
<a href="#" class ="customDialogOption1" data-role="button" data-theme="b" data-rel="back">Yes</a>
<a href="#" class ="customDialogOption2" data-role="button" data-theme="b" data-rel="back">No</a>
<a href="#" class ="customDialogOption3" data-role="button" data-theme="b" data-rel="back">Cancel</a>
</div>
</div>
</div>
<script>
$("#mainPage").on("pageshow", function(e) {
$("#confirm").click(function() {
doCustomDialog("A similar record already exists. Do you want to Update the existing record or Add a new record?", "Update", "Add", "Cancel",
function( returned )
{
//Do things depending on the button clicked, for now just display which button was clicked
alert(returned);
});
});
});
</script>
</body>
</html>
使用 popupafterclose
取消绑定任何附加的click
事件。另外,请注意data-role=popup
的直接父级应该是data-role=page
。
$(document).on("popupafterclose", "#customDialog", function () {
$('#customDialog a').off('click');
});
演示
注意:要更改按钮的文本,请使用.ui-btn-inner
选择器,即 $("#customDialog .customDialogOption1 .ui-btn-inner").text(button1)
,以免丢失按钮样式。
更新:如果您希望使用上述注释,则需要取消绑定单击.ui-btn-inner
即 $('#customDialog a .ui-btn-inner').off('click');
问题是因为每次打开弹出窗口时,您都会将另一个事件附加到每个按钮。您可以通过使用 one()
附加事件来防止这种情况:
$("#customDialog .customDialogOption1").text(button1).one("click.customDialog", function(){
callback("option1");
});
$("#customDialog .customDialogOption2").text(button2).one("click.customDialog", function(){
callback("option2");
});
$("#customDialog .customDialogOption3").text(button3).one("click.customDialog", function(){
callback("option3");
});
或者,您可以通过在doCustomDialog
函数的开头添加以下行来首先删除附加到按钮的所有事件:
$("#customDialog a").off();
然后,您可以像当前一样使用on
重新附加。
相关文章:
- 如何隐藏按钮单击事件上的占位符
- 从Web服务器下载图像按钮单击使用JavaScript
- 在SweetAlert中传递ASP.NET按钮单击事件
- 单选按钮单击可刷新/更改网站的小区域
- 调用按钮单击事件 ajax 加载的用户控件
- 附加 jQuery 代码以在加载和按钮单击时运行
- 在按钮单击时将图像URL数据显示到弹出框中,而无需禁用背景
- 按钮单击服务器单击
- 触发单选按钮单击,并在页面刷新时记住选择
- 如何使用 javascript 而不是使用控制器中的方法在 rails 中呈现部分按钮单击
- jQuery UI 选项卡 - 将参数设置为下一个/上一个按钮单击
- 如何在 Angular JS 中的按钮单击上添加类
- 当元素上有多个类时触发按钮单击事件
- 如何在 HTML 中的按钮单击上更改图像(IMG URL 每次来自服务器)
- 如何使用javascript刷新我的html页面时清除按钮单击
- 阻止后退按钮 - 单击按钮时忽略
- 如何制作按钮.单击“开始时不运行”
- Rails:尝试在按钮单击时渲染部分
- 在页面加载时调用函数,在按钮单击时再次调用函数,但参数不同
- 如何在服务器端的文本中添加按钮单击事件