使用jQuery的对话框,我遇到了以下怪癖(在FF3中测试过):
(文字可以在textarea中,也可以只是页面上的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 :(得分:2)
jQuery对话框将获取用户的焦点(您应该看到对话框中选择的其中一个按钮)。浏览器只有1个焦点,所以你会失去他们选择的任何东西。
您应该在执行对话之前检索用户选择的开始和结束位置,然后在对话框消失后重新选择它。
我没有任何获取和设置用户选择的示例代码,但网络搜索会找到你的。
类似的东西:
$("dialog").focus(function() {
// save the selection
}).blur(function() {
// set the text selection
});
[编辑(Nickolay):请参阅Keep text selection when focus changes了解更多代码]