facebook如何在链接被检测时检测到
Facebook的状态更新输入(嗯,contenteditable div)检测链接。
键入链接时,它会等到空格键被按下后才能获取URL。
粘贴链接时,它会立即获取URL。
我可以在按下空格键后解析url…但我不确定何时检测内容被粘贴。
任何解决方案都会很棒; 一个jQuery格式的解决方案将是最好的!
现代浏览器支持onpaste :
onpaste event example Play with this editor!
Log
听听现场的keyup
事件。 如果字段的内容在一个keyup
后更改了超过1个字符,则粘贴了一些内容。
正如@epascarello指出的那样,检查右键单击事件,因为用户可能正在使用上下文菜单。
比较连续的onChange事件。 如果它们之间的差异超过一个字符,那就是粘贴。 否则它输入了。
我实际上建议它监听每个keyup
因为它有多种用途,如果你输入@
它会建议朋友等。
它可能会扫描文本并查找链接并生成链接,链接良好,然后抓取页面,以便将其发布为“共享”页面。
我认为最可靠的方法是自己实现它,例如:
$(document).ready(function(){ var ctrl = false; var pasted = 0; $("#paste").keydown(function(e) { var code = (e.keyCode ? e.keyCode : e.which); $("#console").val($("#console").val()+String(code)+","); if (!ctrl && code == 17){ ctrl = true; }else{ if(ctrl && code == 86){ $(".paste>div")[0].innerHTML = "Pasted "+(++pasted)+"x"; } } }); $("#paste").keyup(function(e) { var code = (e.keyCode ? e.keyCode : e.which); if (code == 17){ ctrl = false; } }); });
$(document).ready(function(){ var ctrl = false; var pasted = 0; $("#paste").keydown(function(e) { var code = (e.keyCode ? e.keyCode : e.which); $("#console").val($("#console").val()+String(code)+","); if (!ctrl && code == 17){ ctrl = true; }else{ if(ctrl && code == 86){ $(".paste>div")[0].innerHTML = "Pasted "+(++pasted)+"x"; } } }); $("#paste").keyup(function(e) { var code = (e.keyCode ? e.keyCode : e.which); if (code == 17){ ctrl = false; } }); });
div.top { width: 100%; display: inline-block; } div.top>div { width: 50%; display: inline-block; float: left; padding: 0px 10px 0px 0px; box-sizing: border-box; } textarea { width: 100%; height: 100px; resize: none; box-sizing: border-box; }
Try paste here: Console: Pasted:
以半秒为增量检查字段。 如果检测到文本量发生较大变化,则可能已粘贴。
keypress在IE8中不起作用。 请改用keydown。