这是我参与更文挑战的第30天,活动详情查看:更文挑战
4.textInput事件
DOM3 Events 规范增加了一个名为 textInput 的事件,它在字符被输入到可编辑区域时触发。textInput 和 keypress 有两个区别:
- keypress 会在任何可以获得焦点的元素上触发,而 textInput 只在可以编辑区域触发。
- textInput 只在新字符被插入时触发, keypress 对任何影像文本的操作都触发(包括退格键)。
textInput 的 event 对象上提供了一个 data 属性,包含要插入的字符。使用方法如下所示:
let textbox = document.getElementById("myText");
textbox.addEventListener("textInput", (event) => {
  console.log(event.data);
});
复制代码event 对象上还有一个名为 inputMethod 的属性,该属性表示向控件中输入文本的手段。可能的
值如下:
- 表示浏览器不能确定是什么输入手段;
- 表示键盘;
- 表示粘贴;
- 表示拖放操作;
- 表示IME;
- 表示表单选项;
- 表示手写;
- 表示语音;
- 表示组合方式;
- 表示脚本;
可以通过上面的值判断用户是如何输入值的。
合成事件
合成事件是 DOM3 Events 中新增的,用于处理通常使用 IME (Input Method Editors)输入时的复杂输入序列。IME 可以让用户输入物理键盘上没有的字符。例如我们的中文就是通过很多字符组合生成的,也就是合成事件。
合成事件有以下3中:
- compositionstart: 在- IME的文本合成系统打开时触发,表示输入即将开始
- compositionupdate: 在新字符插入输入字段时触发
- compositionend: 在- IME的文本合成系统关闭时触发,表示恢复正常键盘输入
合成事件的 event 会新增一个 data 属性,包含以下几 3 中情况下的值:
- 在 compositionstart事件中,包含正在编辑的文本(例如,已经选择了文本但还没替换);
- 在 compositionupdate事件中,包含要插入的新字符;
- 在 compositionend事件中,包含本次合成过程中输入的全部内容。
合成使用方式如下:
let textbox = document.getElementById("myText");
textbox.addEventListener("compositionstart", (event) => {
  console.log(event.data);
});
textbox.addEventListener("compositionupdate", (event) => {
  console.log(event.data);
});
textbox.addEventListener("compositionend", (event) => {
  console.log(event.data);
});
复制代码HTML5事件
HTML5 详尽地列出了浏览器支持的所有事件。下面会介绍浏览器较好支持的事件,但也并不是所有浏览器支持。
- contextmenu 事件
contextmenu 事件,以专门用于表示何时该显示上下文菜单,从而允许开发者取消默认的上下文菜单并提供自定义菜单。contextmenu 事件冒泡,因此只要给 document 指定一个事件处理程序就可以处理页面上的所有同类事件。contextmenu 事件应该算一种鼠标事件,因此 event 对象上的很多属性都与光标位置有关。来看下面的例子:
<!DOCTYPE html>
<html>
  <head>
    <title>ContextMenu Event Example</title>
  </head>
  <body>
    <div id="myDiv">
      Right click or Ctrl+click me to get a custom context menu. Click anywhere else to get the default context menu.
    </div>
    <ul
      id="myMenu"
      style="position: absolute; visibility: hidden; background-color: silver"
    >
      <li><a href="http://www.somewhere.com"> somewhere</a></li>
      <li><a href="http://www.wrox.com">Wrox site</a></li>
      <li><a href="http://www.somewhere-else.com">somewhere-else</a></li>
    </ul>
    <script>
      window.addEventListener("load", (event) => {
        let div = document.getElementById("myDiv");
        div.addEventListener("contextmenu", (event) => {
          event.preventDefault(); // 阻止默认菜单的展示
          // 展示自定义的菜单
          let menu = document.getElementById("myMenu");
          menu.style.left = event.clientX + "px";
          menu.style.top = event.clientY + "px";
          menu.style.visibility = "visible";
        });
        document.addEventListener("click", (event) => {
          document.getElementById("myMenu").style.visibility = "hidden";
        });
      });
    </script>
  </body>
</html>
复制代码引用
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
    






![[iOS开发]GCD-一一网](https://www.proyy.com/skycj/data/images/2021-08-05/6525c9d709fb4faf4126a87f014243cc.jpg)













![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)
