Оставить выделение при смене фокуса
Есть текст на странице+есть 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, время: 21:36. |