Как сохранить выделение текста при открытии диалогового окна jQuery - PullRequest
2 голосов
/ 05 мая 2009

Используя диалог jQuery, я натолкнулся на следующую причуду (проверено в FF3):

  1. Пользователь выбирает текст
  2. В коде откройте диалоговое окно jQuery
  3. BUG: текст становится невыбранным

(текст может быть в текстовой области или просто HTML на странице)

Итак, для меня это кажется забавным (и раздражающим) багом или причудой, но, возможно, этому есть хорошее объяснение. И что меня больше всего интересует, как сохранить выделение текста после открытия диалогового окна?

Вот код:

function getSelectedText() {
 var t;
 if (d.getSelection) t = d.getSelection();
 else if(d.selection) t = d.selection.createRange();
 if (t.text != undefined) t = t.text;
 if (!t || t=='') {
  var a = d.getElementsByTagName('textarea');
  for (var i = 0; i < a.length; ++i) {
   if (a[i].selectionStart != undefined && a[i].selectionStart != a[i].selectionEnd) {
    t = a[i].value.substring(a[i].selectionStart, a[i].selectionEnd);
    break;
   }   
  }   
 }   
 return t;
}

 $("#dialog").dialog({
    autoOpen: false,
    bgiframe: false,
    height: 60,
    width: 80,
    modal: false,
    show: 'highlight',
    title: 'wc'});
 alert(getSelectedText()); // Text is here      
 $("#dialog").dialog("open");
 alert(getSelectedText()); // Text is not selected here :( damn! 

Спасибо!

1 Ответ

2 голосов
/ 26 мая 2009

Диалог jQuery будет фокусироваться на пользователе (вы должны увидеть одну из кнопок, выбранных в диалоге). Браузеры имеют только 1 фокус, поэтому вы теряете то, что выбрали.

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

У меня нет примера кода для получения и настройки выбора пользователя, но поиск в Интернете должен найти вас.

Что-то вроде:

$("dialog").focus(function() {
  // save the selection
}).blur(function() {
  // set the text selection
});

[отредактировано (Николай): см. Сохранять выделение текста при изменении фокуса для дополнительного кода]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...