在jQuery UI对话框中单击triggerd多次
Click in jQuery UI dialog box triggerd multiple times
我在jQuery对话框中遇到了一个删除按钮的奇怪问题。应该发生的是,一旦单击删除按钮,它就会查找隐藏输入按钮的值,并将该值发送到ajax调用以删除内容。因此,每次单击都应该只显示属于上次单击按钮的单个id。
第一次点击会显示正确的值。但是,当您单击下一个按钮时,它将首先显示以前的id,然后显示新的id,因此ajax调用将进行两次。如果你点击第三个按钮,它会显示三个id,并进行三次ajax调用,这不是应该发生的。每次点击都应该使用一个ajax调用,并且只显示最新的id。
你可以在这里看到一个例子http://jsfiddle.net/uF5fX/11/,ID显示在控制台中。关于我做错了什么,以及如何解决这个问题,有什么想法吗?
$("#item-list").on( "click", ".delete-item", function( e ) {
var dialogBox = $("#delete-confirmation"),
storeId = $(this).next('input[name="store_id"]').val();
console.log( 'main clicked store id = ' + storeId );
dialogBox.dialog({
width: 325,
resizable : false,
modal: true,
minHeight: 0
});
$(".ui-dialog-titlebar").remove();
dialogBox.find(".button-secondary").on( "click", function() {
dialogBox.dialog("close");
});
dialogBox.find(".button-primary").on( "click", function( elem ) {
console.log( 'click delete btn' );
console.log( 'ajax store id = ' + storeId );
dialogBox.dialog("close");
//make a singe ajax call with the last storeId
//elem.stopImmediatePropagation();
elem.stopPropagation();
elem.preventDefault();
return false;
});
e.stopPropagation();
e.preventDefault();
return false;
});
html 的结构
<ul id="item-list">
<li>
<input type="button" value="Delete" name="text" class="delete-item" />
<input type="hidden" value="60" name="store_id" />
</li>
</ul>
通常情况下,当触发多次单击时,可以通过return false或preventDefault/stopPropagation进行修复,但在这里没有区别?
每次单击"删除项目"时,dialogBox按钮都会绑定另一个新事件。
dialogBox.dialog({
width: 325,
resizable : false,
modal: true,
minHeight: 0
});
$(".ui-dialog-titlebar").remove();
var btn1 = dialogBox.find(".button-secondary");
var btn2 = dialogBox.find(".button-primary");
btn1.on( "click", function() {
dialogBox.dialog("close");
btn1.unbind('click');
btn2.unbind('click');
});
btn2.on( "click", function( elem ) {
console.log( 'click delete btn' );
console.log( 'ajax store id = ' + storeId );
dialogBox.dialog("close");
//make a singe ajax call with the last storeId
//elem.stopImmediatePropagation();
elem.stopPropagation();
elem.preventDefault();
btn1.unbind('click');
btn2.unbind('click');
return false;
});
解决此问题的一种更结构化的方法是为对话框的关闭和取消事件定义标准操作。
dialog = $( "#dialog-form" ).dialog({
autoOpen: false,
hide: { effect: "blind", duration: 1000 },
show: { effect: "blind", duration: 1000 },
height: 600,
width: 350,
modal: true,
buttons: {
Cancel: function() {
console.log('dialog cancelled');
dialog.dialog( "close" ); // trigger the close event
}
},
close: function() {
console.log('dialog closed');
var btn2 = dialog.find("#create-user"); // change the #id to the name of your button
btn2.unbind('click'); //unbind the button.
}
});
下次触发对话框并绑定on("click")事件侦听器时,它将只添加一次,而不是增加绑定量。然后,每当对话框关闭时,它都会被解除绑定(并且由于它触发了关闭事件而被取消)。
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 单击F5时如何停止页面加载
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 单击jquery清除输入值
- 单击按钮以等待单击按钮
- 在单击href链接的同时下载文件
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- 使图像在单击时展开到不大于浏览器
- 单击按钮后如何逐个调用分区,上一个分区将隐藏
- 如何在单击复选框后调用控制器方法
- 单击页面上的链接后高度发生变化
- 使用jquery在单击时在单元格中输入值
- 将纯文本URL转换为可单击链接
- ASP.NET通过单击JavaScript按钮触发c#事件
- 单击更改图标并通过javascript添加一个css类
- 阻止在select2单击时调用ajax
- 复制图像路径以单击它
- 在jQuery UI对话框中单击triggerd多次