我有一个jQuery对话框和一个asp.net按钮(删除)。单击删除按钮时,我希望对话框打开一个确认窗口,上面写着“您确定要删除此记录吗?”。当用户单击是时,我想恢复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停止回发对话框打开并显示消息,但是如果没有硬编码删除按钮,我就无法启动删除,这是令人讨厌的。无论如何我可以在对话框显示时按住click事件并在取消时调用preventDefault并在Yes上恢复?
答案 0 :(得分:2)
您可以将实时事件类型更改为mouseup而不是单击,然后使用click事件触发回发。
$("[id*=btnDelete]").live('mouseup', function (e) { ...
...
$("[id*=btnDelete]").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');
});
答案 1 :(得分:0)
单击相应按钮时提交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
}
}
答案 2 :(得分:0)
我有这个工作,但到目前为止我不喜欢这个解决方案。我更喜欢一个更清洁的解决方案,我可以通过按钮点击捕获事件,并以某种方式将其传递到我的对话框中,如果可能的话。所以我坚持并希望有人有更好的答案。让它运行的代码(现在)是:
$("#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事件。
我想知道如果用户通过键盘触发按钮会发生什么,这是我感觉不舒服的部分原因。 :)
坚持做更好的事情,但它至少在运行......