我有一个在UpdatePanel中的GridView里的TemplateField,其中有一个名为
btnDelete
的按钮。与其使用标准的OnClientClick="return confirm('Are you sure?')"
,我想用jQuery对话框。
到目前为止,我能够使用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">
谢谢,Mark
更新:
最终,我不得不使用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');
});