单击鼠标右键并粘贴火灾事件
我想在textarea中粘贴一些文本后立即在textarea中触发事件。 当使用Shift + Ins时,我可以这样做; 但是,当我选择鼠标右键然后粘贴(从下拉菜单中)时,我无法做到这一点。 Shift + Ins后Keyup触发。 在鼠标右键单击后选择粘贴时,其余的都不会触发…我该怎么办?
$("#message").on('keyup contextmenu', function(event) { alert("ok"); });
http://jsfiddle.net/f29vuwoL/7/
谢谢
大多数浏览器都支持input
事件,当粘贴或以其他方式添加内容时会触发该事件,无论如何:
$("#message").on('keyup contextmenu input', function(event) { alert("ok"); });
更新小提琴
请注意,使用input
是最常用的方法,当控件无论如何进行输入时触发,因此如果挂钩多个事件(如上所述),您将获得相同输入的多个调用。 例如,如果您同时挂钩keyup
和input
,在支持input
浏览器上,您将获得两个调用。 类似地,当用户粘贴时paste
和input
,在支持两者的浏览器上。
如果您需要支持没有input
或paste
浏览器,我担心不幸的答案是您需要进行轮询。 尽管如此,每隔250毫秒进行一次轮询并不是要求浏览器做那么多工作,你可以通过function检测是否有必要:
var message = $("#message"); var events = null; var previous; if ('oninput' in message[0]) { // Browser supports input event events = "input"; } else if ('onpaste' in message[0]) { // Browser supports paste event events = "paste keyup contextmenu"; } if (!events) { // Ugh, poll and fire our own events = "pseudoinput"; previous = message.val(); setInterval(function() { var current = message.val(); if (current != previous) { previous = current; message.trigger(events); } }, 250); } console.log("Using: " + events); message.on(events, function(e) { console.log("Got event: " + e.type); });
更新小提琴
您可以使用专用paste
事件:
$("#message").on('paste', function(event) { alert("ok"); });
更新了jsFiddle
但是,您可能想要检查浏览器支持 – 我认为jQuery不会规范化此事件。
如果您需要IE支持,可能会有点困难,但这取决于您的要求 – 它是否绝对需要paste
操作? 如果没有,TJ Crowder的答案是要走的路。
您应该使用input
事件回调。 请在此处查看演示
如果要检测textarea,input:text,input:password或input:search元素的内容何时更改,on输入很有用,因为当元素失去焦点时,这些元素上的onchange事件会触发,而不是在修改.Initput事件在版本9的Internet Explorer中受支持。
$("#message").on('input propertychange', function() { console.log($(this).val()); });
小提琴