0

我有一个问题,我在 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();   
});
4

3 回答 3

1

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

我们能够克服这个问题的唯一方法是使用 setInterval() 进行定期检查,因此我们不会错过这些事件。

于 2012-11-29T08:51:43.163 回答
1

好的,所以您实际上不会允许用户粘贴。如果您不这样做,以下将起作用

<input id="EMName" value="" onpaste="return false" maxlength="10" />
于 2012-11-29T08:55:11.497 回答
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));
        }
    });
});​

演示

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

于 2012-11-29T08:56:08.660 回答