文本select事件结束?

iOS上的文本select结束是否有事件?

我知道我可以运行一个事件,当select改变通过以下:

document.addEventListener("selectionchange", function(event) { var text = window.getSelection().toString(); $(".output").append("<div>" + text + "</div>"); }, false); <div class="output"></div> 

这将更新所选文本的输出,但每次select更改时都会运行。 我想要的只是在select完成后才捕获文本。

有没有这样的事件? 有没有可能做这样的事情?

与您类似,我没有find这个问题的一个很好的解决scheme,所以我决定创build一个解决方法。 这不是最漂亮的,但它的工作原理。

我创build了一个超时函数并将其绑定到“onselectionchange”事件。 每次事件触发我检查,如果我的超时正在运行,如果是这样我删除它,并创build一个新的。

当超时完成时,自定义事件“selectionEnd”被触发。

 // bind selection change event to my function document.onselectionchange = userSelectionChanged; function userSelectionChanged() { // wait 500 ms after the last selection change event if (selectionEndTimeout) { clearTimeout(selectionEndTimeout); } selectionEndTimeout = setTimeout(function () { $(window).trigger('selectionEnd'); }, 500); } $(window).bind('selectionEnd', function () { // reset selection timeout selectionEndTimeout = null; // TODO: Do your cool stuff here........ // get user selection var selectedText = getSelectionText(); // if the selection is not empty show it :) if(selectedText != ''){ // TODO: Do something with the text } }); 

DEMO: http : //jsfiddle.net/dimshik/z8Jge/

我在我的博客上写了一篇小文章: http : //www.dimshik.com/end-of-text-selection-event-on-ios-workaround/

绑定mouseup事件怎么样?

JAVASCRIPT:

 document.addEventListener("mouseup", function(event) { var text = window.getSelection().toString(); $(".output").append("<div>" + text + "</div>"); }, false); 

DEMO: http : //jsfiddle.net/dirtyd77/yTMwu/66/

我也面临这个问题,因为我还没有find一个很好的解决scheme,这是我的解决方法。
当用户在移动浏览器剪贴板上按确认/返回button确认他的select时,它将触发一个selectionEnd事件。

 var longpress = false; var longpressTimer = null; var loop = null; var latestSelection = null; window.ontouchstart = function(){ longpressTimer = setTimeout(function(){ longpress = true; loop = setInterval(getSelection, 200); }, 500) }; window.ontouchend = function(){ if(longpressTimer){ clearTimeout(longpressTimer); } longpress = false; } var getSelection = function (){ var s = window.getSelection(); if(s.rangeCount > 0){ latestSelection = s.getRangeAt(0); }else{ clearInterval(loop); var selEndEvent = new CustomEvent("selectionEnd", {"detail": latestSelection}); window.dispatchEvent(selEndEvent); } } 

长按时,开始监视select的时间间隔。 然后用户确认他的select,剪贴板自动删除它; 这会中断监视器循环并发送selectionEnd事件。
您可以访问详细属性中最后select的文本。

我希望得到关于这个问题的一些消息,并得到一个更好的解决scheme。