2015-01-21 146 views
1

我想在textarea中粘貼一些文本後立即觸發一個textarea事件。當使用Shift + Ins時,我可以做到這一點;然而,我不能這樣做,當鼠標右鍵,然後粘貼(從下拉菜單)被選中。 Shift + Ins後觸發Keyup。當鼠標右鍵單擊後選擇「粘貼」時,其餘都不會觸發......我必須做什麼?點擊鼠標右鍵點擊火焰事件並粘貼

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

$("#message").on('keyup contextmenu', function(event) { 
    alert("ok"); 
}); 

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

謝謝

回答

6

大多數瀏覽器都支持無論input事件,這是當事情被粘貼或解僱,否則增加,如何:

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

Updated Fiddle

N注意使用input是最常用的方法,當控件得到輸入時觸發,而不管如何,所以如果掛鉤了多個事件(如上所述),則會爲同一輸入獲取多個調用。例如,如果您同時支持keyupinput,則在支持input的瀏覽器上,您將收到兩個電話。同樣,對於支持兩者的瀏覽器,當用戶粘貼時,pasteinput

如果您需要支持沒有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); 
}); 

Updated Fiddle

0

,如果你想要的輸入是非常有用的檢測textarea,input:text,input:password或input:search元素的內容何時發生更改,因爲這些元素上的onchange事件在元素失去焦點時觸發,而不是在修改後立即觸發。oninput事件在版本9的Internet Explorer。

$("#message").on('input propertychange', function() { 
     console.log($(this).val()); 
    }); 

Fiddle

+1

你能給你的答案增加一些解釋嗎? – 2015-01-21 08:44:51

2

您也可以使用專用paste事件:

$("#message").on('paste', function(event) { 
    alert("ok"); 
}); 

Updated jsFiddle

但是你可能要檢查browser support - 我不認爲jQuery的標準化此事件。

如果您需要IE支持,可能會有點困難,但這取決於您的要求 - 它是否絕對需要成爲paste操作?如果不是的話,TJ克勞德的答案就是要走的路。

+0

不知道可以這樣做。 – xyres 2015-01-21 08:22:29

2

您應該使用input事件回調。看演示here

+1

只是FYI,在這種情況下'輸入'是*事件*,而不是*選擇器* – CodingIntrigue 2015-01-21 08:23:51