paste & input:侦听浏览器粘贴事件

本文探讨了input和paste两个事件的区别与应用场景,包括兼容性问题及解决方法,帮助开发者根据需求选择合适的事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

paster和input都能够侦听Dom的粘贴操作(如果是ctrl+v操作,那么keydown都可以完成任务,但是右键粘贴就不行了),这两个事件用得很少,我没有遇到问题之前都没有注意到这两个事件的存在。这两个事件看起来很相似,但是还是有区别的,不能通用。

input

// w3schools的定义
The oninput event occurs when an element gets user input.
This event occurs when the value of an or element is changed.

这里写图片描述

#usage
function handleInput(ev) {
    alert(ev.target.value);
}
window.onload = function() {
    document.getElementById('myTextArea').addEventListener('input',handleInput,false);
}

根据定义,input是Level 3 Event,IE8不支持input事件的。事实上这是一个更替change和press的高级事件,侦听的不仅仅是粘贴,还包括任何的输入事件。但是如果要支持IE8,那么只能放弃这个事件了。

paste

//w3schools的定义
The onpaste event occurs when the user pastes some content in an element.

这个事件所以浏览器都支持,但是问题是当事件促发时,input事实上没有change,也就是无法即时获取输入框的内容。这个事件应该命名为pasting或者beforePaste更加合理。

$("#message-content").on('paste', contentHandler);
function contentHandler(e){
    var textArea = $(this);
    //此处不能获取当前的输入修改
    console.log(textArea.val());
}

但是也并非没有方法解决问题,只需要添加timeout就可以获取输入框变化后的内容:

$("#message-content").on('paste', contentHandler);
function contentHandler(e){
    var textArea = $(this);
    setTimeout(function(){
        console.log(textArea.val());
    }, 200);
}

综上所述,如果无需兼容IE8,那么oninput是更好的选择,如果要支持IE8,那么最好选择onPaste了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值