我正在尝试制作类似于 Twitter 的文本框,为此我编写了代码
Keyup和Change Events工作正常,但粘贴事件有点奇怪,当我在textarea中粘贴一些东西时,字数不会在那一刻发生变化,经过一些调试我发现粘贴事件在粘贴之前会激活文本框上的内容。我不知道他们是如何处理Twitter的。 这是我的代码: 事件:
'click #textboxId' : 'submitQuestion'
'keyup #textboxId' : 'wordCounter'
'change #textboxId' : 'wordCounter'
'paste #textboxId' : 'wordCounter'
wordCounter: ->
#Code for Word Count#
由于粘贴事件的预粘贴性质,该实例的工作计数不会发生变化 您的建议和帮助将不胜感激,谢谢您的时间。
答案 0 :(得分:9)
见这个例子。
$('textarea').bind('input propertychange', function() {
$('#output').html($(this).val().length + ' characters');
});
这种行为非常奇怪。您会认为其中一个事件能够正确捕捉到这一点吗?我很惊讶,谷歌没有更多答案。
答案 1 :(得分:2)
function update()
{
alert($textbox.val().length);
}
var $textbox = $('input');
$textbox.bind('keyup change cut paste', function(){
update(); //code to count or do something else
});
// And this line is to catch the browser paste event
$textbox.bind('input paste',function(e){ setTimeout( update, 250); });
答案 2 :(得分:0)
您现在应该使用on()而不是bind()see this post。 创建命名函数也没什么必要,你可以创建一个匿名函数。
$('#pasteElement').on('paste', function() {
setTimeout(function(){
alert($('#pasteElement').val());
}, 100);
});
答案 3 :(得分:0)
你可以做一件事,首先获得原始数据。然后您可以获取事件粘贴数据并添加它们。
$("#id").on("paste keypress ",function(event){
// eg. you want to get last lenght
var length=$("#id").val().length;
if(event.type == "paste"){
//then you can get paste event data.=
length+=event.originalEvent.clipboardData.getData('text').length;
}
});`