从今天开始,我在ASPX LinkButton上遇到一些Telerik RadConfirm 弹出消息的问题。第一次单击LinkButton后,将显示该消息,如果我按"确定",则没有任何反应,并且在浏览器JS控制台中看不到任何错误消息。如果我再次按下 LinkButton,回发事件将启动,就像它第一次单击时应该有的那样。
这种行为似乎只存在于Chrome中。Firefox、Edge 和 Opera 不受影响。这个问题从今天才出现,我们在线的每个网站的行为都是一样的。
这是一个例子。请注意,使用相同范围编写的每段代码都显示相同的行为。
<asp:LinkButton ID="docSaveBtn" runat="server" Text="Save"
SkinID="linkButton_blue" OnClick="docSaveBtn_Click"
OnClientClick="return radconfirm('Are you sure?', event, null ,null, null, '');" />
在页面中,呈现的 HTML 如下所示:
<a onclick="return radconfirm('Are you sure?', event, null ,null, null, '');"
id="MC_docSaveBtn" class="linkButton_blue" aria-disabled="false"
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MC$docSaveBtn", "", true, "", "", false, true))">Save</a>
更新 1
编写null
而不是event
可以修复其他 ASPX 控件(如 ImageButton)上的问题。为了解释它,这里有一个例子:
<asp:ImageButton ID="imgDuplica" runat="server"
ImageUrl="~/App_Themes/AQP.v.1.0.0.1/Images/16x16/documenti.png"
SkinID="documents_image_small" OnClick="imgDuplica_Click" ToolTip="Duplica Gara"
OnClientClick="return radconfirm('Procedere alla duplicazione della gara?', null, null, null, null, '');" />
同样,呈现的 HTML 如下所示:
<input type="image" name="ctl00$MC$uc_RisultatoRicercaGara$rgResults$ctl00$ctl08$imgDuplica"
id="ctl00_MC_uc_RisultatoRicercaGara_rgResults_ctl00_ctl08_imgDuplica" title="Duplica Gara"
src="../../App_Themes/AQP.v.1.0.0.1/Images/16x16/documenti.png"
onclick="return radconfirm('Procedere alla duplicazione della gara?', null, null, null, null, '');WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MC$uc_RisultatoRicercaGara$rgResults$ctl00$ctl08$imgDuplica", "", true, "", "", false, false))">
null
或只是return radconfirm('');
在Chrome 73上的LinkButton上不起作用。其他控件工作,所有控件在不同的浏览器上工作。
创建事件然后从内部回发的修复效果不佳。我需要将 HREF 传递给事件,并且在我项目中已有的每个 radconfirm 上创建一个事件是不可行的。
我不确定这首先是如何工作的。链接按钮将打开"确认"对话框,但是,随后的回发将中断操作。为了防止回发,在 ClientClick 事件处理程序中尝试调用radconfirm()
方法而不是返回它,然后在执行该方法后return false;
。查看通过 JavaScript 调用 RadConfirm 文章,查看使用 RadConfirm 的示例。
此外,用于 radconfirm 的 callBackFunction">event" 是无效的,因为有一个名为 Window.event() 的内置方法,并且会与之冲突。
尝试将 callBackFunction 更改为其他内容,例如:eventFn、myEvent,基本上更改为与现有/内置函数不冲突的任何函数。
以下是您可以尝试的正确方法的示例:
HTML 标记和客户端
<script type="text/javascript">
function eventFn(args) {
if (args)
__doPostBack('<%= docSaveBtn.ClientID %>', "");
}
</script>
<asp:LinkButton ID="docSaveBtn" runat="server" Text="Save"
SkinID="linkButton_blue" OnClick="docSaveBtn_Click"
OnClientClick="radconfirm('Are you sure?', eventFn, null ,null, null, ''); return false;" />
<telerik:RadWindowManager ID="RadWindowManager1" runat="server"></telerik:RadWindowManager>
C# - 服务器端
protected void docSaveBtn_Click(object sender, EventArgs e)
{
}
更新
同样,客户端事件需要执行而不是返回。直接调用函数,而不是在前面写回车。
默认情况下,LinkButton 和 ImageButton 都会执行回发,为了防止这种情况,您需要取消该事件。在 ClientClick 事件中,在调用
radconfirm()
函数后,立即写入return false
。例如radconfirm("Something"); return false;
现在,将弹出RadFirmes,您可以选择单击"确定"或"取消"。通过单击"确定",除非您使用 CallBack 函数,否则应用程序将不知道下一步该做什么。您需要向 RadConfirm 添加一个回调函数,您可以使用该函数手动执行回发。这在我上面分享的链接中有所描述。
以下是按钮的配置方式:
<asp:ImageButton ID="imgDuplica" runat="server"
ImageUrl="https://via.placeholder.com/40x20" OnClick="imgDuplica_Click" ToolTip="Duplica Gara"
OnClientClick="radconfirm('Procedere alla duplicazione della gara?', thisIsMyCallBackFunction, null, null, null, ''); return false;" />
回调函数:
<script type="text/javascript">
function thisIsMyCallBackFunction(confirmation) {
if (confirmation == true) {
__doPostBack('<%= imgDuplica.ClientID %>', "");
}
}
</script>
另外,为什么不使用带有内置确认对话框功能的 Telerik 按钮?
- 按钮 - 确认对话框
- 按钮 - 确认回发