闪电龟龟--笔记

万物寻其根,通其堵,便能解其困。
随笔 - 169, 文章 - 0, 评论 - 1, 阅读 - 79596
  博客园  :: 新随笔  :: 管理

关于监听事件、页面通知、页面通信

Posted on   闪电龟龟  阅读(260)  评论(0编辑  收藏  举报

1.使用事件keydown监听tab键切换input/textarea等输入框,造成的鼠标丢失问题

复制代码
//tab按键监听
window.addEventListener("keydown", function (event) {
    if (event.keyCode == 9) {
        if (!pageFrame.isResponse()) {
            event.preventDefault();  // 阻止默认事件,能够解决鼠标丢失事件(如input不可选择的时候丢失),pageFrame.isResponse()可以做时间卡控防止按的速度过快
            return;
        }
    }
});
复制代码

 AddBy 2020-09-07

2.关于子界面处理,刷新父级界面处理。通信案例

方案一:使用"window.opener.location.href",当直接进行指定操作时,可以刷新父级界面,例如:关闭子界面前刷新

window.opener.location.href = window.opener.location.href;
window.close();

方案二:使用H5中的message监听事件

子界面/同级界面数据:

if (window != null && typeof window.postMessage != 'undefined') {
  window.opener.postMessage("Update", "*");
}
window.close();

子界面数据:

复制代码

  var PosstDatas = {
    name: "Update",
    datas: ""
  };

  // 注:父级判断需要修改为:e.data.name

if (window != null && typeof window.postMessage != 'undefined') {
                window.parent.postMessage(JSON.stringify(PosstDatas), "*");
            }
复制代码

 

父级/接收页面:

window.onmessage = function (e) {if ("Update" == e.data) {
        // 父级刷新操作(调用内部函数处理)
    }
};

 

综上两种方案,我们可以看出,使用window.opener.location.href可以简便的使用,而window.onmessage相对复杂些,但是前者是刷新整个界面,后者调用的是内部函数,相对于用户体验而言window.onmessage也许会是一个不错的选择。

EndBy 2020-09-07

 

Addby 2024-05-06

Vue(父/子)页面通信如:Vue控件 父子模板通信 - 闪电龟龟 - 博客园 (cnblogs.com)

或者使用 $emit / $on

Endby 2024-05-06

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示