Маэстро,
А что, если подойти совсем с другой стороны и «гасить»
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 не сохраняет выделение на текстарии.