jQuery功能,根据粘贴文本时不起作用的字数限制文本输入

jQuery function to limit text entry based on word-count not working while pasting text

本文关键字:文本 输入 不起作用 jQuery 功能      更新时间:2023-09-26

这是jquery代码

var max_count = 200;
$(document).ready(function () {
var wordCounts = {};
$("#word_count").keyup(function () {
    var matches = this.value.match(/'b/g);
    wordCounts[this.id] = matches ? matches.length / 2 : 0;
    var finalCount = 0;
    $.each(wordCounts, function (k, v) {
        finalCount += v;
    });
    var vl = this.value;
    if (finalCount > max_count) {
        vl = vl.substring(0, vl.length - 1);
        this.value = vl;
    }
    var countleft = parseInt(max_count - finalCount);
    $('#display_count').html(finalCount);
    $('#count_left').html(countleft);
    am_cal(finalCount);
}).keyup();
});

此代码的工作是计算单词数并将其限制为增加 200。

当我们在文本区域中输入时,它可以正常工作,并且计数,当它达到 200 时,它不允许写入更多,但是当我复制粘贴代码时,它一直超过 200,我该如何纠正?

这是小提琴

http://jsfiddle.net/aVd4H/

提前致谢

首先,您的代码更正正在updated

这是复制粘贴字数限制的演示,您可以将其集成到代码中。

jQuery(document).ready(function($) {
    function limits(obj, limit){
        var text = $(obj).val(); 
        var length = text.length;
        if(length > limit){
            $(obj).val(text.substr(0,limit));
        } else {
            /**
             * Alerts the user of the remaining characters.
             * I do alert here, but you can do any other thing you like.
             */
            alert(limit - length + " characters remaining!");
        }
    }
    $('textarea').keyup(function() {
        limits($(this), 20);
    });
});

根据您的要求完成代码 这里

最后调用 am_cal() 函数。

 var max_count = 200;
$(document).ready(function () {
    var wordCounts = {};
    $("#word_count").keyup(function () {
        CheckAndUpdateWordCount();
    });
});

将逻辑放在通用方法中。 在 KeyUp 事件和 afterpaste 事件中调用该方法。

function CheckAndUpdateWordCount()
{
       var Myelement = $("#word_count");
       var matches = Myelement .value.match(/'b/g);
        wordCounts[Myelement.id] = matches ? matches.length / 2 : 0;
        var finalCount = 0;
        $.each(wordCounts, function (k, v) {
            finalCount += v;
        });
        var vl = Myelement.value;
        if (finalCount > max_count) {
            vl = vl.substring(0, vl.length - 1);
          Myelement.value = vl;
        }
        var countleft = parseInt(max_count - finalCount);
        $('#display_count').html(finalCount);
        $('#count_left').html(countleft);
        am_cal(finalCount);
}

//Custom event After paste
$('HTML').live('paste', function (e) {
    e = $.extend({}, e, { type: 'afterpaste' });
    window.setTimeout(function () { $(e.target).trigger(e); }, 0);
});

使用上述方法。

$("#word_count").bind('afterpaste', function (e) {
//call a method to check 
//call the method here to check the word count after pasting any content.
CheckAndUpdateWordCount();
});