2013-09-04 3 views
0

У меня есть div, который является contenteditable = true, который имеет дочерние div. Я пытаюсь прикрепить событие keydown к одному из дочерних divs, чтобы очистить текст по умолчанию. Однако я не могу заставить событие keydown работать. Событие с кликом работает нормально, поэтому я не уверен, что мне не хватает.jquery keydown событие не работает для contenteditable div

Сначала я пытаюсь сосредоточиться на внешнем div, который имеет удовлетворительный набор в true.

var $editableDiv = $("#ID"); 
$editableDiv.focus(); 

Тогда я хочу, чтобы переместить курсор в DIV Я хочу их вводить в

var focusDiv = $editableDiv.children("div").children("div")[0]; 
var sel = window.getSelection(); 
var range = document.createRange(); 
range.setStart(focusDiv, 0); 
range.collapse(true); 
sel.removeAllRanges(); 
sel.addRange(range); 

Теперь я пытаюсь прикрепить KeyDown событие:.

$(focusDiv).on("keydown", function (e) 
{ 
    var $target = $(e.target); 
    if ($target.text() === "Enter comment here") 
    { 
    $target.text(""); 
    } 
} 

Но это никогда не срабатывает с событием keydown. Он будет срабатывать, если я изменю его на событие click и нажмите на него. Это связано с тем, что keydown не работает над контентными тегами? Чтение руководства jquery:

Событие keydown отправляется элементу, когда пользователь сначала нажимает клавишу на клавиатуре. Он может быть прикреплен к любому элементу, но событие отправляется только элементу, который имеет фокус. Фокусируемые элементы могут варьироваться между браузерами, но элементы формы всегда могут получить фокус, поэтому разумные кандидаты для этого типа события.

Может быть, проблема с неспособностью действительно «сфокусироваться»? Возможно, если я дам ему tabIndex?

+0

Я в значительной степени ответил на свой вопрос. Проблема в том, что я фокусировался на внешнем div, а затем перемещал курсор во внутренний div. Затем попытка вызвать событие keydown на внутреннем div, которому в первую очередь не уделялось внимание. Но если я сосредоточусь на внутреннем div, у меня появляется стэнг хэшированный ящик вокруг него, который мне не нравится. Не уверен, что с этим делать. – griztown

ответ

3

Проблема была в том, где я применял фокус. Я применил фокус к родительскому div, а затем переместил курсор к одному из дочерних элементов и попытался применить событие keydown к этому ребенку. Как только я применил его к родителям, он сработал.

Смежные вопросы