6

我有这个 jQuery 代码:

var char = 60;
    $("#counter").append("You have <strong>" + char + "</strong> char.");
    $("#StatusEntry").keyup(function () {
        if ($(this).val().length > char) {
            $(this).val($(this).val().substr(0, char));
        }
        var rest = char - $(this).val().length;
        $("#counter").html("You have <strong>" + rest + "</strong> char.");
        if (rest <= 10) {
            $("#counter").css("color", "#ff7777");
        }
        else {
            $("#counter").css("color", "#111111");
        }
    });

它工作正常!但是如果我有一个 val() 我有 text() 它不起作用。

问题是在可用字符的末尾它开始从头替换文本......使用 val 是完美的。

为什么我需要它在文本上?因为我使用的是所见即所得插件,它将我的 textarea 转换为 div。

我正在尝试使用 .stopPropagation 但它不起作用..尝试返回 false 并且什么都没有......

希望得到您的帮助!

4

3 回答 3

7

如果您需要使用 NicEdit,那么您可以通过将 keyup / keydown 事件绑定到新创建的 div 来限制击键(它不会替换您的 textarea - 它会添加一个 div 并隐藏您的 textarea):

$("#StatusEntry").prev().keydown(function () {

这是有效的,因为新创建的 div 总是在 textarea 之前 - 所以这将适用于多个编辑器。

但是,正如您似乎在评论中指出的那样, contentEditable div 可能就足够了 - 如果它使用以下方法:

    var char = 60;
    $("#counter").append("You have <strong>" + char + "</strong> char.");
    $("#StatusEntry").keyup(function () {
        if ($(this).text().length > char) {
            $(this).text($(this).text().substr(1));
        }
        var rest = char - $(this).text().length;
        $("#counter").html("You have <strong>" + rest + "</strong> char.");
        if (rest <= 10) {
            $("#counter").css("color", "#ff7777");
        }
        else {
            $("#counter").css("color", "#111111");
        }
    });

演示:http: //jsfiddle.net/RjNuX/3

于 2011-11-16T22:16:43.573 回答
0

你必须以漂亮的编辑 div 为目标。

$(".nicEdit-main").keyup(...

如果您有多个编辑器,则此解决方案将不起作用。

于 2011-11-16T22:07:03.167 回答
0
var len = 40;    
$(".nicEdit-main").keydown(function () {
    if($(".nicEdit-main").html().length>len){
        var string = $('.nicEdit-main').html();
        $('.nicEdit-main').html(string.substring(0, len));
        placeCaretAtEnd($('.nicEdit-main').get(0));
    }
});

placeCaretAtEnd 函数从这里开始

于 2014-11-05T16:11:35.857 回答