Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.05.2011, 22:32
Аспирант
Отправить личное сообщение для DZHETIGAPA Посмотреть профиль Найти все сообщения от DZHETIGAPA
 
Регистрация: 30.10.2010
Сообщений: 41

Оставить выделение при смене фокуса
Есть текст на странице+есть textarea. Суть в том, что после выделения текста нужно ввести текст в textarea. Но, как только текстареа получает фокус, то все выделение пропадает.

можно ли как-то средствами js решить данную проблему, чтобы при смене фокуса выделение оставалось?
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2011, 21:55
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Если Вам нужно "оставить выделение", чтобы затем его взять и, например, вставить в этот же 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>
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2011, 11:57
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Маэстро,
А что, если подойти совсем с другой стороны и «гасить» 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 не сохраняет выделение на текстарии.
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2011, 18:14
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от subzey Посмотреть сообщение
...Но вот беда. Кажется, IE 6—8 не сохраняет выделение на текстарии.
Откровенно говоря, не понял, что Вы хотели показать своим фрагментом. Да, IE8 не "держит" выделение в textarea. Но как я понял - это и не нужно. Там вроде сказано, что текст выделенн на странице, а не в textarea, т.е. вне textarea. Хотя, как частный случай можно понимать и внутри textarea. Но это уже другая задача..
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2011, 19:42
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Хм... А я понял задачу как „не сохраняется выделение в текстарии”. Ну, да ладно, у автора темы будут два кода на разные случаи жизни
Ответить с цитированием
  #6 (permalink)  
Старый 01.02.2018, 20:11
Аватар для Chile
Аспирант
Отправить личное сообщение для Chile Посмотреть профиль Найти все сообщения от Chile
 
Регистрация: 10.02.2016
Сообщений: 45

Мне тоже надобно, чтобы при потере фокуса выделение сохранялось
Помогите скриптом, пожалуйста. У меня textarea, сверху кнопки, для вставки тегов, для форматирования текста в textarea. Если выделить, а потом кликнуть по кнопке, то, выделение пропадает и текст тегами не обрамляется
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
изменение значения input при смене значения select galart jQuery 4 30.01.2015 19:39
проверить клик при потере фокуса TavRox jQuery 7 17.01.2011 13:03
Теряется selection при потере фокуса danik.js Internet Explorer 1 15.10.2010 08:33
Добрый день возникли проблемы при установке фокуса в Mozilla Даниэль Ноубл Общие вопросы Javascript 7 24.04.2010 00:50
Выделение текста при использовании слайдера x00xer Firefox/Mozilla 8 29.09.2009 07:45