没有必要这样做。只要返回true,回发处理程序将被击中。例如:
<ItemTemplate>
<asp:Button id="btnTest" runat="server"
Text="button" OnClientClick="
customConfirmDialog(function (isconfirmed)
{
return isconfirmed;
});
"/>
</ItemTemplate>
我无法访问我之前编写的内容,但下面是一个基于您在其他答案中编写的内容的快速示例。您可能需要改变一些事情,但你应该得到的想法:
window.confirm = function(question, ok, cancel) {
var defer = $.Deferred();
ok = ok || 'OK'; //setup text for the confirmation
cancel = cancel || 'Cancel';
$(document).ready(function() {
$('#customMessage').text(question);
var btnOk = $('#btnCustomOK');
var btnCancel = $('#btnCustomCancel');
btnOk.val(ok);
btnCancel.val(cancel);
btnOk.unbind("click"); //prevents chaining of events if multiple confirms are used
btnCancel.unbind("click");
btnOk.click(function() {
$('#MyConfirm').hide();
defer.resolve(true); //gets passed as isconfirmed=true
return false; //prevent postback
});
btnCancel.click(function() {
$('#MyConfirm').hide();
defer.resolve(false);
return false; //prevents postback
});
$('#MyConfirm').show();
btnOk.focus();
});
return defer.promise();
}
然后使用:
<asp:Button id="btnTest" runat="server" Text="button"
OnClientClick="confirm('My Message blah blah').then(//this runs after ok/cancel is clicked, thanks to defer.resolve() and defer.promise().
function(isConfirmed) {
if (isConfirmed)
__doPostBack(source.id,'');
}); return false;//return false here to prevent the initial postback from occurring"/>
</ItemTemplate>
的“source.id”部分是不完全正确的,但有一部分承诺应该帮助你。
是的,这个工作,除了customConfirmDialog是异步的,更新的问题 – SumGuy 2014-10-28 20:17:16
所以你会想要承诺。为了达到这个目的,我实际上实施了一些非常类似的事情。覆盖window.confirm定制确认,绑定处理回发的承诺。想让我发表一个例子吗? – basher 2014-10-28 20:20:00
是的请,那么我就不必处理获取回拨电话 – SumGuy 2014-10-28 20:28:24