2

jQueryのダイアログを使用して、次の癖に遭遇しました(FF3でテスト済み)。

  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! 

ありがとう!

4

1 に答える 1

2

jQueryダイアログがユーザーのフォーカスを取得します(ダイアログで選択されたボタンの1つが表示されます)。ブラウザにはフォーカスが1つしかないため、選択したものはすべて失われます。

ダイアログを実行する前に、ユーザーの選択の開始位置と終了位置を取得し、ダイアログが消えた後に再選択する必要があります。

ユーザーの選択を取得および設定するためのサンプルコードはありませんが、Web検索でいくつか見つけることができます。

何かのようなもの :

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

[編集(ニコライ):より多くのコードについては、フォーカスが変更されたときにテキストの選択を維持するを参照してください]

于 2009-05-26T04:54:58.130 に答える