看起来Internet Explorer的恶魔再次袭来,我似乎无法想出这个:
我有一个使用OnCommand的ImageButton从我的数据库中删除特定条目。然而,我已经实现了它,以便用户首先确认他们想要删除特定项目。
以下是我的ImageButton
的代码<asp:ImageButton runat="server" ID="imgDelete" ImageUrl="~/Controls/TaskDetails/Images/delete.png" OnCommand="Tag_DeleteCommand" Visible='<%# CanDelete %>' OnClientClick="javascript:confirmDialog(this, 'Remove Tag','Are you sure you want to remove this tag?', 1); return false;"
CommandArgument='<%# Eval("TagID") %>' />
这是我的ConfirmDialog功能
function confirmDialog(sender, title, message, type) {
//type entities
//1 = warning
//2 = error
//3 = success
//4 = Information
var sender = $(sender);
$("#message_dialog_inner_text").html(message);
$("#message_dialog_message_container").dialog({
modal: true,
title: title,
zIndex: 10003,
dialogClass: (type > 0) ? "message_dialog_type_" + type : "",
position: 'center',
buttons: {
"OK": function () {
//the yes option was selected, we now disable the onclientclick event, and fire the click event.
$(this).dialog("close");
if (sender.hasAttr("href")) {
window.location = sender.attr('href');
} else {
sender.removeAttr("onclick");
sender.trigger("click");
}
},
"Cancel": function () { $(this).dialog("close"); }
}
});
return false;
}
这在Chrome,FF,Safari中运行良好,但IE只是忽略它并进行回发。我甚至将我的OnClientClick更改为“return false;”它似乎对发回的按钮没有影响。我也将它从ImageButton更改为只是一个Button,但无济于事。我假设它与OnCommand事件有关,但是我对此感到茫然!我已经实现了一个非常庞大的应用程序,所以我想管理变更的范围。如果有人有一些意见,我将不胜感激!
修改
好吧,让我也只是强调,我不希望它回发,即使我只是OnClientClick =“return false;”命令按钮仍然回发(不是你期望的那样)。
以下是我的ImageButton控件的渲染标记
<input type="image" name="ctl00$body$pnlContentRight$pnlCurrentTaskDetails$repTags$ctl00$tagItem$imgDelete" id="ctl00_body_pnlContentRight_pnlCurrentTaskDetails_repTags_ctl00_tagItem_imgDelete" src="Controls/TaskDetails/Images/delete.png" onclick="javascript:confirmDialog(this, 'Remove Tag','Are you sure you want to remove this tag?', 1); return false;" style="border-width:0px;">
答案 0 :(得分:1)
这不是针对您的具体问题的解决方案,但这是您可能需要考虑的解决方法(我已经在几个地方使用过它):
这可能不是实现此行为的“正确”方法(从ASP.NET纯粹主义的角度来看)。然而,随着变通办法的出现,我认为这不是太痛苦的kuldgey。根据我的经验,它似乎适用于所有浏览器(假设它们已启用JS)。 HTH。
答案 1 :(得分:0)
你OnClientClick
总是返回false,这意味着永远不会执行该事件。尝试从确认中返回输入,如下所示:
OnClientClick="return confirmDialog(...);"
您需要确保有一种方法可以从confirmDialog
函数返回true。看起来该函数也总是返回false。
我对jQuery UI对话框不是很熟悉,但在概念上它应该是这样的:
buttons: {
"OK": function () { return true; }, //perform a postback and execute command
"Cancel": function () { return false; } //abort postback and do nothing
}