如何在jquery中使用带有粘贴事件的preventDefault()

时间:2012-11-29 08:48:32

标签: jquery

我有一个问题,我对TextBox进行了验证,以防止用户输入超过10个字符的数据,我已经在keyprees上应用了验证,但我无法限制用户粘贴数据的长度更多比10。 我已经搜索并尝试粘贴事件,但它没有工作,它不限制用户粘贴值,preventDefault();没有用。

代码 -

$('#EMName').bind('paste', function (e) {
        var self = $(this);
        var v = false;
        var flag = setTimeout(function () {

            var len = $(self).val().length;
            if (len > 10) {
                alert("false");
                v = false;
                return false
            }
            else {
                alert("true");
                v = true;
                return true;
            }

        }, 0);
        if (v == false)
            e.preventDefault();   
});

3 个答案:

答案 0 :(得分:1)

这也是我们在应用程序中遇到的问题。这不仅仅是粘贴文本,它还有各种浏览器插件,可以为您预填字段或在浏览器中存储表单数据,不会触发任何事件。

我们能够克服这个问题的唯一方法是使用setInterval()定期检查,所以我们没有错过这些事件。

答案 1 :(得分:1)

好的,所以你实际上不会允许用户粘贴。如果你不这样做,那么

<input id="EMName" value="" onpaste="return false" maxlength="10" />

答案 2 :(得分:0)

基本上,您希望监视尽可能多的事件,以便允许更改该值的输入。我在我的一个网站上使用类似的东西,这就是我所做的:

$(document).ready(function(){
    $('#target').on('propertychange keyup input paste', function(){
        var target = $(this);
        var text = target.val();
        if (text.length > 10) {
            target.val(text.substring(0, 9));
        }
    });
});​

Demo

这适用于键入,ctrl + v,右键单击粘贴和大多数其他内容。我不确定如果浏览器插件填充它是否会起作用。