Telerik RadEditor перемещает курсор при перетаскивании

У меня есть страница веб-форм С#, где я хочу перетащить html-элементы в радар-проводник telerik. Эта часть работает так, как ожидалось, за исключением того, что когда вы перетаскиваете элемент в редактор, я хочу, чтобы позиция курсора в радиаторе следовала за мышью. Он настроен аналогично этой демонстрации на веб-сайте Teleriks. Кроме того, я использую listview вместо treeview. http://demos.telerik.com/aspnet-ajax/editor/examples/treeviewandeditor/defaultcs.aspx

Я попытался имитировать клики на радиодетекторе, чтобы переместить курсор, но не повезло. Есть идеи?

Редактировать:

На прошлой неделе я сделал полурабочее решение. Это далеко не идеально, но я решил поделиться им, если кто-то еще хочет сделать это лучше.

function controlDragging(sender, args) {
 var event = args.get_domEvent();
 var editor = $find("radEditLayout");

 if (isMouseOverEditor(editor, event)) {
 var x = event.pageX - event.offsetX;
 var y = event.pageY - event.offsetY;
 var node = editor.get_document().elementFromPoint(x, y);
 if (node) {
 setCaret(editor, node, 0); 
 }
 }
 }

 function setCaret(editor, element, position) {
 var selection = editor.getSelection(),
 range = selection.getRange(true);
 if (range.setStartAfter) {//W3 range
 range.setStartAfter(element);
 }
 else { //IE7/8 textRange
 range.moveToElementText(element);
 range.moveStart('character', position);
 }
 range.collapse(true);
 selection.selectRange(range);
 }

 function isMouseOverEditor(editor, event) {
 return $telerik.isMouseOverElementEx(editor.get_contentAreaElement(), event);
 }

Есть еще предложения?

2 ответа

Возможно, вы сможете найти что-то с диапазонами, но я точно не знаю, как я их не использовал. Ниже приведены основы получения уже выбранного диапазона http://www.telerik.com/help/aspnet-ajax/editor-getselection-1.html и вот как получить объект документа, чтобы вы могли использовать диапазоны в нем: http://www.telerik.com/help/aspnet-ajax/editor-getting-reference-to-radeditor-documentobject.html. Возможно, это поможет вам начать работу, но я думаю, что будет много работы: как установить позицию каретки (курсора) в контентном элементе (div)? потому что я не уверен, как вы можете вычислить позицию, по которой вы хотите, чтобы курсор находился от координат мыши.


Я знаю, что этот пост старый, но, возможно, другие могут извлечь из этого выгоду. Вот фрагмент, который помог мне упасть в произвольной позиции в области содержимого RadEditor. Это не связано с перемещением позиции курсора.

kendoDropTarget({
 drop: function(e) {
 debugger;
 var top = e.draggable.drag.y.location - $('.k-content').offset().top;
 var left= e.draggable.drag.x.location - $('.k-content').offset().left;
 element.css({
 top: top + 'px',
 left: left + 'px'
 });
 $('.overlay').remove();
 $('.k-content').contents().find('body').html($('.k-content').contents().find('body').html() + $(element).outerHTML());
 }

licensed under cc by-sa 3.0 with attribution.