在div元素中更改html的jQuery事件?

长话短说 – 我有一个可编辑的

,当有人粘贴时,我想清除格式。由于jQuery无法控制剪贴板,我不想进入跨浏览器兼容性,我想我想侦听内容更改时运行的事件。

我试过$("#mydiv").change()但很明显只适用于文本字段和textareas(?),那么有没有办法做到这一点?

我也接受替代解决方案,我选择使用的任何解决方案都将被标记为正确答案。

谢谢!

您可以使用.keyup()进行复制和粘贴。 右键单击然后在上下文菜单中选择粘贴似乎不记录单击,因此.click()不起作用….而是使用setInterval()检查每X秒捕获右键单击粘贴。

不确定是否可以将.keyup()绑定到div(div是否可以在所有浏览器中聚焦),但是所有键盘都会冒泡到文档,因此$(document)将始终有效。

 $(function() { // Get initial text: var previous = $("#mydiv").text(); // Make DIV editable if clicked $("#mydiv").click(function() { this.contentEditable = 'true'; }); // Create a function for what to do if there is a change: $check = function() { // Check for a change if ($("#mydiv").text() != previous) { // What to do if there's been a change // ... } // Store what contents are for later comparison previous = $("#mydiv").text(); } // Add the div changed handler to both keyup (ctr + v) // and mouseclick (right click paste) $(document).keyup($check); // Right click work around is to check every Xs setInterval(function() { $check(); }, 1000); });​ 

jsFiddle示例

这适用于粘贴….它捕获ctr,shift等键。 (如果您尝试使用w ctr-v并且一个接一个地释放一个键,那么请关注状态,因为状态仅在第一个键释放后显示changed ,在第二个键释放后显示same 。 … 正如它应该)。


注意:我确实喜欢同时拥有.keyup()处理程序和setInterval ,因为这可以保证按键即时反馈….即使右键单击粘贴后可能会有延迟。

请改用

这可能是您的解决方案: http : //garage.pimentech.net/scripts_doc_jquery_jframe/

您可以使用’keydown’事件 – 它将捕获shift键按下,因此可用于粘贴,以及删除键。

如果您需要检测内容是否已更改,请存储旧内容并比较触发事件的时间。

要通过鼠标捕获粘贴,您可能需要根据计时器定期将当前内容与旧内容进行比较。 您可以通过激活焦点上的计时器并在模糊时停止它来减少一些开销。

我认为TinyMCE for JQuery可以为您完成工作。