10

我有一个可内容编辑的div

<div class="editable" contenteditable="true"></div>

用户可以在其中输入任何内容。当用户在 div 中进行选择时,有什么方法可以获取事件。

就像是:

$('.editable').onSelection(function(e, selection){alert(selection);}
4

3 回答 3

13

你可以尝试这样的事情:

没有 'selectend' 事件,但我们可以通过观察 mouseup 事件来确定用户完成选择的时间

$(function () {
    $('.editable').on('selectstart', function () {
        $(document).one('mouseup', function() {
            alert(this.getSelection());
        });
    });
});​
于 2012-11-08T10:14:54.470 回答
1

在@Elliot 的回答和@Michael Bates 的评论之后,这似乎对于鼠标和键盘选择事件都完美无缺(例如在 TypeScript 中):

export function attachSelectionListener(element: HTMLElement) : void {
  if (!element.contentEditable) {
    return;
  }
  element.onselectstart = () => handleSelectionChange(element);
}

function handleSelectionChange(element: HTMLElement): void {
  document.onmouseup = () => retrieveSelection(element);
  document.onkeyup = () => retrieveSelection(element);
}

function retrieveSelection(element: HTMLElement) : void {
  const selection = document.getSelection();

  // Ignore empty selection
  if (!selection || !selection.toString()) {
    return;
  }
  alert(selection.toString());
}

在您的应用程序中使用它时,您可能想检查是否需要在某个时候再次删除侦听器。

于 2021-02-09T18:42:01.220 回答
-2
$('#ta').select(function() {
alert('Handler for .select() called.');
});

.select( handler(eventObject) ) 返回: jQuery 将事件处理程序绑定到“select” JavaScript 事件,或在元素上触发该事件。

.select( handler(eventObject) ) handler(eventObject)每次触发事件时执行的函数。

.select( [eventData], handler(eventObject) ) eventData 将传递给事件处理程序的数据映射。handler(eventObject) 每次触发事件时执行的函数。

检查链接

于 2012-11-08T10:05:07.547 回答