将keyDown()函数添加到<a> which are new children of a contenteditable div</a>

时间:2011-10-18 09:59:22

标签: javascript jquery contenteditable

Jsfiddle:http://jsfiddle.net/qTEmc/1/

我需要将事件与keypress事件相关联,这些事件是在contenteditable中添加的。

如果您尝试在链接的jfiddle中输入contenteditable区域,您将看到它创建一个链接,您可以在其中键入。我按回车,你去换行。我想要的是在新链接中按回来触发一个功能。为了进步,我只是想让它在此刻回复警报。

有没有人知道这样做的可靠方法?

1 个答案:

答案 0 :(得分:1)

您将无法检测链接本身中的关键事件,因为它们不会触发关键事件。相反,您需要调整现有的keypress处理程序以获取contenteditable元素,以检查选择是否位于链接中。这是一个功能。我也updated your demo

function selectionInsideLink() {
    var node = null, sel;

    // Get the selection container node
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.rangeCount) {
            node = sel.getRangeAt(0).commonAncestorContainer;
        }
    } else if (document.selection) {
        sel = document.selection;
        if (sel.type != "Control") {
            node = sel.createRange().parentElement();
        }
    }

    // Check if the node is or is contained inside a link
    while (node) {
        if (node.nodeType == 1 && node.tagName.toLowerCase() == "a") {
            return true;
        }
        node = node.parentNode;
    }
    return false;
}