2013-02-25 63 views
2

iOS上的文本选择结束是否存在事件?文本选择事件结束?

我知道什么时候该选择通过以下改变,我可以运行一个事件:

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

<div class="output"></div> 

这将更新.output与选定的文本,但运行每次选择更改。我想要的只是在选择结束后才捕获文本。

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

回答

1

如何绑定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/

+0

不,当iOS手指离开屏幕时,不会触发'mouseup'。 – Charlie 2013-02-26 01:06:41

+0

'touchend'呢? – Dom 2013-02-26 01:20:26

+1

我希望:\如果您要选择文本,然后松开手指,不会调用touchend。然而,如果你在选择内点击某处,它会调用'touchend'。 – Charlie 2013-02-26 01:22:42

4

类似于你我没有找到这个问题的好办法,所以我决定创建一个解决方法。 它不是最漂亮的,但它的工作原理。

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

当超时完成时,自定义事件“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/

+2

有趣的......我不知道是否会有一旦手指已经从屏幕上释放只记录文本。到目前为止,当选择停止改变时,这将运行,但在手指完全选择完成时不会。 – Charlie 2014-04-01 13:35:58

1

我也面临这个问题,因为我还没有找到一个好的解决办法,这是我的解决方法。
当用户在移动浏览器剪贴板中按确认/返回按钮确认他的选择时,它将触发一个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); 
    } 
} 

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

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