我有一个jQuery对话框和一个asp.net按钮(删除)。当点击删除按钮时,我希望对话框打开一个确认窗口,说"您确定要删除此记录吗?"当用户单击yes时,我想恢复asp.net回发。下面是我到目前为止的代码:
$("#dialog-delete").dialog({
autoOpen: false,
height: 200,
width: 400,
modal: true,
resizable: false,
buttons: {
'Cancel': function () {
$(this).dialog('close');
},
'Yes': function () {
$(this).dialog('close');
//__doPostBack('ctl00$cp1$btnDelete','');
}
},
open: function () {
$(":button:contains('Yes')").addClass("red");
}
});
$("[id*=btnDelete]").live('click', function (e) {
e.preventDefault();
$("#dialog-delete").dialog('open');
});
所以我用preventDefault停止回发,对话框打开并显示消息,但我不能在没有硬编码删除按钮的情况下删除,这是讨厌的。无论如何,我可以保持点击事件,而对话框显示和调用preventDefault取消和恢复上是吗?
您可以将实时事件类型更改为mouseup而不是click,然后使用click事件来触发回发。
$("[id*=btnDelete]").live('mouseup', function (e) { ...
...
$("[id*=btnDelete]").click();
编辑(基于注释)
另一种想法是,您可以坚持处理click事件的原始想法,并在确认删除后调用.die()函数以删除先前附加的活动事件处理程序,使您能够调用.click()并引起回发。
你可以这样调用。die()函数:
$("#dialog-delete").dialog({
autoOpen: false,
height: 200,
width: 400,
modal: true,
resizable: false,
buttons: {
'Cancel': function () {
$(this).dialog('close');
},
'Yes': function () {
$(this).dialog('close');
$("[id*=btnDelete]").die('click');
$("[id*=btnDelete]").click();
}
},
open: function () {
$(":button:contains('Yes')").addClass("red");
}
});
$("[id*=btnDelete]").live('click', function (e) {
e.preventDefault();
$("#dialog-delete").dialog('open');
});
提交ASP。. NET表单。
...
buttons: {
'Cancel': function () {
$(this).dialog('close');
},
'Yes': function () {
$(this).dialog('close');
$('#aspnetForm').submit(); // you may need to use a different selector based on your form name
}
}
我得到了这个工作,但我不喜欢解决方案到目前为止。如果可能的话,我更喜欢一个更简洁的解决方案,我可以在按钮点击时捕获事件,并以某种方式将其传递到我的对话框中。所以我坚持着,希望有人能给出更好的答案。我的代码让它工作(目前)是:
$("#dialog-delete").dialog({
autoOpen: false,
height: 200,
width: 400,
modal: true,
resizable: false,
buttons: {
'Cancel': function () {
$(this).dialog('close');
},
'Yes': function () {
$(this).dialog('close');
$("[id*=btnDelete]")[0].click();
//__doPostBack('ctl00$cp1$btnVoid','');
}
},
open: function () {
$(":button:contains('Yes')").addClass("red");
}
});
$("[id*=btnDelete]").live('mousedown', function (e) {
e.preventDefault();
$("#dialog-delete").dialog('open');
});
基于上面@jdavies的帮助(以及我的评论来增强答案)。我将按钮处理程序更改为mousedown事件,并在Yes按钮处理程序中触发click事件。
我想知道如果用户通过键盘触发按钮会发生什么,这也是我觉得恶心的部分原因。:)
等待更好的东西,但它至少在运行…