我在 UpdatePanel 的 GridView 中有一个 TemplateField,并带有一个名为 btnDelete
的按钮。我想使用 jQuery 对话框,而不是标准的 OnClientClick="return inform('你确定吗?')"
。
到目前为止,我可以使用 btnDelete.Attributes["onclick"]
设置 jQuery 并在代码隐藏中设置 jQuery 对话框代码。但是,在所有情况下,它都会在我有机会单击“确认”或“取消”之前发回服务器。
这是它生成的 HTML:
<input type="submit" rel="Are you sure?" class="action-link delete" id="ctl00_c1_gvTransfers_ctl02_btnDelete" onclick="return function() {
$('#delete-transfer-confirm').dialog({
buttons: {
'Confirm' : function() { $(this).dialog('close'); return true; },
'Cancel' : function() { $(this).dialog('close'); return false; }
}
});
$('p.message').text($(this).attr('rel'));
$('#delete-transfer-confirm').dialog('open');
};" value="Delete" name="ctl00$c1$gvTransfers$ctl02$btnDelete">
我做错了什么导致该函数在单击任一按钮之前不会阻塞?
相反,标准确认工作得很好:
<input type="submit" class="action-link delete" id="ctl00_c1_gvTransfers_ctl02_btnDelete" onclick="try{if (!window.confirm('Are you sure?')){return false;};}catch(e1){alert("Unexpected Error:\n\n" + e1.toString());return false;};" value="Delete" name="ctl00$c1$gvTransfers$ctl02$btnDelete">
谢谢, 标记
更新:
最终,我不得不使用 UseSubmitBehavior="false"来获取要渲染的 name=""属性。然后我必须重写 OnClientClick,将值设置为“return;”所以默认的 __doPostBack() 不会被执行。然后我能够连接一个 .live() 点击处理程序,它在确认时调用 __doPostBack():
$('input.delete').live('click', function(e) {
var btnDelete = $(this);
alert($(btnDelete).attr('name'));
e.preventDefault();
$('#delete-transfer-confirm').dialog({
buttons: {
'Confirm': function() {
$(this).dialog('close');
__doPostBack($(btnDelete).attr('name'), '');
return true;
},
'Cancel': function() {
$(this).dialog('close');
return false;
}
}
});
$('p.message').text($(this).attr('rel'));
$('#delete-transfer-confirm').dialog('open');
});
最佳答案
查看此问题所选答案的示例:How to implement "confirmation" dialog in Jquery UI dialog?
一些注意事项:
不要将 onclick 功能放在 onclick 属性中。 jQuery 的一大好处是它允许您执行不显眼的 Javascript。相反,做这样的事情:
$(function() {
$('.delete').click(function(e) {
e.preventDefault() //this will stop the automatic form submission
//your functionality here
});
});
此外,请确保您的对话框是在单击事件之外实例化的,以便在第一次单击事件发生之前对其进行初始化。因此,您的结果将是这样的:
$(function() {
$("#delete-transfer-confirm").dialog({
autoOpen: false,
modal: true
});
$('.delete').click(function(e) {
e.preventDefault();
$('#delete-transfer-confirm').dialog({
buttons: {
'Confirm': function() {
$(this).dialog('close');
return true;
},
'Cancel': function() {
$(this).dialog('close');
return false;
}
}
});
$('p.message').text($(this).attr('rel'));
$('#delete-transfer-confirm').dialog('open');
});
});
这应该对你有用。
关于asp.net - ASP.NET 按钮 OnClientClick 中的 jQuery 确认对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4046664/