Оставить выделение при смене фокуса
Есть текст на странице+есть textarea. Суть в том, что после выделения текста нужно ввести текст в textarea. Но, как только текстареа получает фокус, то все выделение пропадает.
можно ли как-то средствами js решить данную проблему, чтобы при смене фокуса выделение оставалось? |
Если Вам нужно "оставить выделение", чтобы затем его взять и, например, вставить в этот же textarea, то не используйте onfocus(), а используйте onmousedown()
<div id="mama">11111111111 222222222222222 333333333333333 выделите часть текста</div>
<br>
<script type="text/javascript">
var ta = document.createElement('textarea');
document.body.appendChild(ta);
//ta.onfocus = function() {...}; //-BAD
ta.onmousedown = function(){gettext();};
function gettext()
{
var selected;
if (window.getSelection) selected = window.getSelection()
else if (document.getSelection) selected = document.getSelection()
else selected = document.selection.createRange().text
alert(selected);
};
</script>
|
Маэстро,
А что, если подойти совсем с другой стороны и «гасить» defaultAction у mousedown на textarea, если на той нет фокуса? При переходе по Tab-то выделение сохраняется нормально.
<script type="text/javascript">
(function(){
function handleBlur(e){
var trigger = e.srcElement || e.target;
if (trigger && trigger.tagName.toLowerCase() == "textarea" && (trigger.getAttribute("lockedselection")||"").toLowerCase() == "true"){
trigger.skipClickEvent = true;
};
};
function handleFocus(e){
var trigger = e.srcElement || e.target;
if (trigger && trigger.skipClickEvent && trigger.tagName.toLowerCase() == "textarea"){
trigger.skipClickEvent = false;
};
};
function handleMousedown(e){
var trigger = e.srcElement || e.target;
if (trigger && trigger.skipClickEvent && trigger.tagName.toLowerCase() == "textarea"){
trigger.skipClickEvent = false;
if (e.preventDefault) e.preventDefault();
e.returnValue = false;
trigger.focus();
};
};
if (document.addEventListener){
document.addEventListener("blur", handleBlur, true);
document.addEventListener("focus", handleFocus, true);
document.addEventListener("mousedown", handleMousedown, false);
} else if (document.attachEvent){
document.attachEvent("onbeforedeactivate", handleBlur);
document.attachEvent("onbeforeactivate", handleFocus);
document.attachEvent("onmousedown", handleMousedown);
};
})();
</script>
<div><textarea lockedselection="true">В этой текстарии выделение будет «заблокировано»</textarea></div>
<div><textarea lockedselection="true">И в этой</textarea></div>
<div><textarea>А в этой нет</textarea></div>
Но вот беда. Кажется, IE 6—8 не сохраняет выделение на текстарии. :-? |
Цитата:
|
Хм... А я понял задачу как „не сохраняется выделение в текстарии”. Ну, да ладно, у автора темы будут два кода на разные случаи жизни :)
|
Мне тоже надобно, чтобы при потере фокуса выделение сохранялось
:) Помогите скриптом, пожалуйста. У меня textarea, сверху кнопки, для вставки тегов, для форматирования текста в textarea. Если выделить, а потом кликнуть по кнопке, то, выделение пропадает и текст тегами не обрамляется:(
|
| Часовой пояс GMT +3, время: 11:01. |