Telerik "radconfirm" 在 Chrome 上按 "OK" 时不会引发 href



从今天开始,我在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(&quot;ctl00$MC$docSaveBtn&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, 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(&quot;ctl00$MC$uc_RisultatoRicercaGara$rgResults$ctl00$ctl08$imgDuplica&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, 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)
{
}

更新

  1. 同样,客户端事件需要执行而不是返回。直接调用函数,而不是在前面写回车。

  2. 默认情况下,LinkButton 和 ImageButton 都会执行回发,为了防止这种情况,您需要取消该事件。在 ClientClick 事件中,在调用radconfirm()函数后,立即写入return false。例如radconfirm("Something"); return false;

  3. 现在,将弹出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 按钮?

  • 按钮 - 确认对话框
  • 按钮 - 确认回发

最新更新