0

我正在开发基于contenteditable 尝试修改 IE 的 contenteditable 行为的文本编辑器。

例如:按回车键时<br />不插入新<p>元素

keyup我发现 IE 在打字之间和打字时完成了它的 contenteditable 行为keydown。所以我可以在这两个事件触发时添加我的修改。

但是来的时候Paste就不行了。

案例是:我想像这样粘贴几个段落的文本块

paragraph 1

another paragraph

and so on

<p>IE 会自动在新标签中嵌入段落。例如,如果我想添加class这些<p>元素,我需要知道这些元素是何时创建的。

我试过了onpastenodeInserted。他们都在变化发生之前被解雇了。IE 完成工作后是否触发了任何事件?

4

1 回答 1

0

我一直在使用按键事件检测它。如果我没记错的话,您可以从输入参数中获取按下的键和修饰符,以检测 Ctrl+v。

编辑 显然不是,我刚刚检查过。JQuery 使用“粘贴”事件进行标识。

HTML

<p id="cont" contenteditable="true">This is an editable paragraph.</p>

Javascript

$("#cont").keypress(function() {
    console.log("Keypress " + Math.random());
});

$("#cont").bind('paste', function(e){
    console.log("Paste " + Math.random());
});

这是小提琴:http: //jsfiddle.net/3djRp/3/

EDIT2 我借用了别人的事件组合在内容更改后检测粘贴,但在某些浏览器中它会触发两次。

$cont = $("#cont");

$cont.data('oldval', $cont.text());
//console.log($cont.data('oldval'));

$cont.bind("propertychange input keyup paste", function(event){
    if($cont.data('oldval') != $cont.text()) {
        //console.log("old " + $cont.data('oldval'));
        //console.log("new " + $cont.text());
        $cont.data('oldVal', $cont.text());

        console.log('change: ' + $cont.text());
    }
});
于 2013-06-20T10:44:33.067 回答