如何在ASP.NET后台代码中将鼠标点击事件传递到前端JavaScript函数
解决方案
你之前的尝试无法生效,核心原因是后台创建的EventArgs是.NET服务端对象,输出到前端页面时只会被序列化为普通字符串,和浏览器点击时产生的DOM原生事件对象完全无关,无法通过传递服务端对象的方式拿到前端事件。
根据你的限制条件,有两种可用方案:
方案1:仅修改绑定的onclick字符串(不改动原有参数逻辑,不破坏现有调用机制)
这是全浏览器兼容的最优方案,只需要在绑定的JS调用末尾额外加一个前端上下文的event关键字作为参数即可,不需要加引号,原有参数完全保留:
后台C#代码修改:
// 仅在参数末尾新增 ,event 即可,原有逻辑完全不变 imgTest.Attributes.Add("onclick", "javascript:return Test('" + sUrl + "','" + txtTest.ClientID + "','" + hdnTestId.ClientID + "', event);");
前端JS代码修改:
function Test(sUrl,TestName,TestId, e){ // e就是原生点击事件对象,可直接使用 console.log(e.target); // 触发点击的元素 console.log(e.clientX, e.clientY); // 点击的屏幕坐标 }
方案2:完全不能修改任何后台绑定逻辑、也不能修改Test函数参数定义
这种情况可以直接在Test函数内部读取全局事件对象,兼容99%以上的主流浏览器:
function Test(sUrl,TestName,TestId){ // 兼容写法:优先取全局event,兜底适配老版本火狐浏览器 const event = window.event || arguments.callee.caller.arguments[0]; // 正常使用event对象即可 }
内容的提问来源于stack exchange,提问作者Akhileshkumar singh
相关产品推荐
相关产品推荐

