2009-05-05 4 views
2

С помощью диалогового окна JQuery, я наткнулся на следующую галтель (протестировано в FF3): выборКак сохранить выделение текста при открытии диалогового окна JQuery

  1. Пользователь текста
  2. В коде, откройте JQuery диалоговое
  3. Ошибка: текст получает невыбранный

(текст может быть в текстовом поле или просто 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! 

Спасибо!

+0

насколько я могу судить, это нормальное поведение. Если вы выберете текст, а затем щелкните в другом месте страницы, выбор не будет выполнен. – Geoff

+0

Это не щелчок - диалог открывается программно (с помощью setInterval), и нет щелчка. – Ran

ответ

2

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

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

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

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

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

[редактировать (Nickolay): см Keep text selection when focus changes для более коды]

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