单击鼠标右键并粘贴Fire事件

Unk*_*per 1 javascript jquery

我想在textarea中粘贴一些文本后立即在textarea中触发事件.当使用Shift + Ins时,我可以这样做; 但是,当我选择鼠标右键然后粘贴(从下拉菜单中)时,我无法做到这一点.Shift + Ins后Keyup触发.在鼠标右键单击后选择粘贴时,其余的都没有触发...我该怎么办?

<textarea name="message"  id="message"></textarea>

$("#message").on('keyup contextmenu', function(event) { 
     alert("ok");
 });
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/f29vuwoL/7/

谢谢

T.J*_*der 8

大多数浏览器都支持该input事件,无论如何:粘贴或以其他方式添加内容时都会触发该事件:

$("#message").on('keyup contextmenu input', function(event) { 
  alert("ok");
});
Run Code Online (Sandbox Code Playgroud)

更新小提琴

请注意,using input是最常用的方法,无论方式如何都会在控件输入时触发,因此如果挂钩多个事件(如上所述),您将获得相同输入的多个调用.例如,如果您同时挂钩,keyup并且input在支持的浏览器上input,您将获得两个调用.类似地paste,input当用户粘贴时,在支持两者的浏览器上.

如果您需要支持的浏览器没有任何inputpaste,恐怕不幸的答案是,你需要轮询.尽管如此,每隔(比方说)250毫秒轮询并不是要求浏览器做那么多工作,你可以通过功能检测是否有必要:

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);
});
Run Code Online (Sandbox Code Playgroud)

更新小提琴