javascript - .preventDefault() 无法正常工作。 ('input', 函数{})

标签 javascript jquery html dom-events event-propagation

我想将可编辑 div 中的字符数限制为 10。在用户达到限制后,我想使用 .preventDefault() 方法来保护 div 免受额外字符的影响。你能帮帮我吗?

JSFiddle https://jsfiddle.net/7x2dfgx6/1/

HTML

<div class="profileInfo" id="About" style="border:solid;" contenteditable="true">OOOOO</div>

JQuery

    jQuery(document).ready(function($){

    const limit = 10;
    rem = limit - $('#About').text().length;
    $("#counter").append("You have <strong>" + rem + "</strong> chars left.");
    $("#About").on('input', function(event) {
        var char = $('#About').text().length;
        rem = limit - char;
        $("#counter").html("You have <strong>" + rem + "</strong> chars left.");
        if(char>limit)
        {
            event.preventDefault();
            //TODO
        }
    });
});

最佳答案

回答你的主要问题:
.preventDefault() 取消 cancelable 事件的行为. input 事件不是 .

要检查事件是否可取消,请尝试:console.log(event.cancelable);
对于输入它会说“假”


你可能想要这样的东西(未经测试):

const limit = 10;
var rem = limit - $('#About').text().length;
$("#counter").append("You have <strong>" + rem + "</strong> chars left.");
$("#About").on('input', function(event) {
    var char = $(this).text().length;
    rem = limit - char;
    if(rem <= 0){
        $(this).text($(this).text().slice(0, limit));
    }
    $("#counter").html("You have <strong>" + rem + "</strong> chars left.");
});

编辑

JSFiddle demo
由于它是 contentEditable,我不得不使用额外的代码(来自 this 答案)在输入的末尾设置插入符号。

关于javascript - .preventDefault() 无法正常工作。 ('input', 函数{}),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32298064/

相关文章:

javascript - 在 protovis 图表上绘制任意数量的线条

javascript - 当数据不在范围内时如何使用正则表达式返回 false?

jquery - 防止浏览器在提交表单时导航到操作 URL

html - Div 容器未拉伸(stretch)主全宽 div

javascript - 从 url 获取值而不是使用 javascript 选择复选框

javascript - SymPy 在 1&1 托管主机上安装

Javascript弹出窗口在点击外部时隐藏,如果点击链接则显示

javascript - 如何通过JQuery选择其中没有html的<select>元素

asp.net-mvc - for循环中的Asp.net Div标签

html - 如何自动高度,div z 索引内容的宽度