通过JS解决页面刷新导致按钮OnClientClick事件消失问题

 更新时间:2024年12月11日 17:12:52   作者:初九之潜龙勿用  
这篇文章主要介绍了如何通过JS解决页面刷新导致按钮OnClientClick事件消失问题,OnClientClick 提供客户端JS执行能力,并以 return false 或 return true 来决定是否继续执行 OnClick 事件,需要的朋友可以参考下

故障现象

System.Web.UI.WebControls.Button 提供了 OnClientClick  和 OnClick 事件属性。OnClientClick 提供客户端JS执行能力,并以 return false 或 return true 来决定是否继续执行 OnClick 事件,OnClick 事件执行服务器方法,执行 OnClick 事件会刷新 Web 页面。

比如如下代码:

<asp:Button id="sendButton" OnClientClick="return sendReady();" 
runat="server" class="btn btn-white" 
  Text="发送短信验证码" onclick="sendButton_Click" />

OnClientClick 事件执行 sendReady() JS函数,如果函数 return true; 则执行 onclick 事件中 sendButton_Click 服务器方法。

另外如果点击此按钮将其置为不可用状态(this.disabled = true;),  再去调用其它服务器按钮事件,如下图:

图中的发送按钮点击成功后,暂时按钮不可用。此时去操作其它服务器按钮,如上传图片。则可能会出现不可用按钮恢复可用状态时,点击后直接执行了服务器方法,即 OnClientClick 事件属性消失。

开发运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.7.2 

开发工具:VS2019  C#

解决

发现通过服务器事件捆绑,无效:

void Page_load(Object sender, EventArgs e)
{
     sendButton.OnClientClick = "return sendReady();";
}

客户端事件捆绑,有效:

sendbtn.setAttribute("onclick","return sendReady();");

其它

本示例中如果将按钮置为不可用状态(disabled = true;),即使客户端 JS 返回 return true ,也无法调用服务器方法,需要通过 JS 引用,简单的引用方法,我们可以调用如下代码:

__doPostBack(document.getElementById("sendButton").name, '');

 __doPostBack方法由.net 生成并管理,可以调用服务器方法,请注意引用的是元素的 name 而不是 ID,引用此方法还需要在页面头部引用如下属性:

<%@ Page Language="C#" AutoEventWireup="true" MaintainScrollPositionOnPostback="true" %>

当然如果不添加此选项,我们还可以通过模拟调用隐藏服务器按钮的方法。

到此这篇关于通过JS解决页面刷新导致按钮OnClientClick事件消失问题的文章就介绍到这了,更多相关JS解决OnClientClick事件消失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解小程序如何改变onLoad的执行时机

    详解小程序如何改变onLoad的执行时机

    这篇文章主要介绍了详解小程序如何改变onLoad的执行时机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 如何用JavaScript让你的浏览器说话

    如何用JavaScript让你的浏览器说话

    这篇文章主要介绍了如何用JavaScript让你的浏览器说话,对语音感兴趣的同学,可以实验一下
    2021-04-04
  • javascript客户端解决方案 缓存提供程序

    javascript客户端解决方案 缓存提供程序

    这是介绍的是一个不错的javascript的方面的客户端解决方案,可选配支持HTML5本地存储器.
    2010-07-07
  • 微信小程序自定义复选框

    微信小程序自定义复选框

    这篇文章主要为大家详细介绍了微信小程序自定义复选框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 判断及设置浏览器全屏模式

    判断及设置浏览器全屏模式

    这篇文章主要介绍了如何判断及设置浏览器全屏模式,需要的朋友可以参考下
    2014-04-04
  • JS实现基数排序的示例代码

    JS实现基数排序的示例代码

    基数排序是一种根据数字位数的值,对整数进行排序的算法,本文主要介绍了JS实现基数排序的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 微信sdk实现禁止微信分享(使用原生php实现)

    微信sdk实现禁止微信分享(使用原生php实现)

    这篇文章主要介绍了微信sdk实现禁止微信分享(使用原生php实现),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • JS数组中的splice()方法及用原生写法分享

    JS数组中的splice()方法及用原生写法分享

    这篇文章主要介绍了JS中数组的splice()方法,包括其用途、参数(起始位置、删除元素个数、添加元素等)、不同参数情况的处理方式,还详细讲解了用原生JS手写splice()方法的思路和代码实现
    2024-11-11
  • webpack前端应用之基础打包实现

    webpack前端应用之基础打包实现

    本文主要介绍了webpack前端应用之基础打包实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 前端文件加载耗时过长的原因分析及解决方案

    前端文件加载耗时过长的原因分析及解决方案

    前端响应时间过长可能由多种原因引起,包括网络延迟、服务器性能问题、代码优化不足等,这篇文章主要介绍了前端文件加载耗时过长的原因分析及解决方案,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07

最新评论