Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Запрет выделения текста и изображений на javascript (Юрий Насретдинов)
Goto page Previous  1, 2
Author Message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Tue Apr 11, 2006 3:20 pm (написано за 54 секунды)
   Post subject:
Reply with quote

WingedFox
Все работает, как ожидается. Я, кажется, догадываюсь, что Вы задумали... Если это так, остается позавидовать Вашей изобретательности! Попробую заменить ранний способ на этот.
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Apr 11, 2006 3:55 pm (спустя 34 минуты; написано за 5 минут 41 секунду)
   Post subject:
Reply with quote

AKS
Нет, я это не задумывал 8*)
Так будет сильно тормозить всё. Это просто проверка - сбрасывается выделение или нет.

Первая версия вызывалась на каждое событие mousemove и достаточно сильно подтормаживала. Потом я перенёс обработчик на mousedown, т.к. выделение не вылезает за пределы поля ввода.
Но focus() работает по разному во всех браузерах. Возможно, что Опера некоторых версий просто не фокусируется на этом поле, по одной ей известным причинам.

Что можно попробовать: сделать поле видимым и с помощью z-index: -1 убрать его под <body>. Правда я это не пробовал.

PS: т.к. в IE надо перемещать поле под курсор, чтобы страница не дёргалась... прикручивать onmouseover - плохая идея, будет тормозить вполне ощутимо.
Back to top
View user's profile Send private message
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Tue Apr 11, 2006 5:00 pm (спустя 1 час 5 минут)
   Post subject:
Reply with quote

WingedFox
Да, так оно и есть (о тормозах).
По поводу моей задачки: я таскаю по странице div и Опера 8 выделяет вслед за курсором текстовые фрагменты, но тут же сбрасывает выделение, фокусируясь на input'е. Затем снова выделяет, затем тут же сбрасывает. Следовательно, она все же фокусируется, но не удерживает фокус.
У меня там интересная ситуация с аттачем события resize, может ответите здесь, между делом (у Вас это в двух словах, наверно, получится)?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue Apr 11, 2006 5:19 pm (спустя 18 минут; написано за 3 минуты 1 секунду)
   Post subject:
Reply with quote

AKS
Для Оперы можно попробовать прикручивать захват мышиных событий.
В 7.х версиях он глючил, но может быть в 8 и заработает.

В какие именно моменты фокус сбрасывается? после наступления события mouseover?
можно попробовать ещё поиграться с типами инпутов.

А что за "resize" и что с ним?
Если к выделению текста он не имеет отношения - лучше вынести в отдельную тему.
Back to top
View user's profile Send private message
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Mon Jul 31, 2006 7:36 am (спустя 3 месяца 19 дней 14 часов 17 минут; написано за 2 минуты 47 секунд)
   Post subject:
Reply with quote

Удивительно, но в Opera 90b для запрета выделения работает такой способ:
Code (JavaScript): скопировать код в буфер обмена
el.onmousedown = function(){this.focus()}
Забавно:)
Запрещает так же как и ИЕшный onselectstart="event.returnValue=false", т.е. выделить всетаки можно, если начать выделение с незапрещенной области
Back to top
View user's profile Send private message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Jul 31, 2006 1:27 pm (спустя 5 часов 50 минут)
   Post subject:
Reply with quote

el.focus(); ? В других это работает?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon Jul 31, 2006 1:51 pm (спустя 23 минуты; написано за 1 минуту 33 секунды)
   Post subject:
Reply with quote

Наверное ребята восприняли
W3C DOM Level 2 wrote:
Unlike the HTML event focus, DOMFocusIn can be applied to any focusable EventTarget, not just FORM controls.
как руководство к действию.

Хотя
W3C DOM Level 2 wrote:
focus
    The focus event occurs when an element receives focus either via a pointing device or by tabbing navigation. This event is valid for the following elements: LABEL, INPUT, SELECT, TEXTAREA, and BUTTON.
Ну и, как минимум, в IE такой трюк не работает.
Back to top
View user's profile Send private message
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Mon Jul 31, 2006 7:28 pm (спустя 5 часов 37 минут; написано за 5 минут 31 секунду)
   Post subject:
Reply with quote

Юpий Насрeтдинов
Quote:
el.focus(); ? В других это работает?
Естественно нет :) А кто то знает универсальный способ?
WingedFox
Увы. обнаружил совершенно случайно :).
Back to top
View user's profile Send private message
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Wed Feb 07, 2007 11:43 pm (спустя 6 месяцев 7 дней 4 часа 14 минут; написано за 1 минуту 2 секунды)
   Post subject:
Reply with quote

если хочется на время дрэгэндропа отключить выделение, то можно просто повесить сверху на экран прозрачный див. от этого и скрипты вычисления координат упростятся...
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Thu Feb 08, 2007 12:00 am (спустя 16 минут; написано за 36 секунд)
   Post subject:
Reply with quote

Dark-Demon
Это только для перемещения имеет смысл. А для драг-дропа нужно ещё и цели отлавливать.
Back to top
View user's profile Send private message
Dark-Demon
Участник форума
Banned


Joined: 04 Feb 2007
Posts: 45
Карма: -3
   поощрить/наказать

Location: spb

PostPosted: Thu Feb 08, 2007 2:37 am (спустя 2 часа 37 минут; написано за 19 секунд)
   Post subject:
Reply with quote

а потенциальные цели ещё выше дива выводить :)
Back to top
View user's profile Send private message
Сергей Кокшаров
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Mar 04, 2007 8:20 am (спустя 24 дня 5 часов 43 минуты; написано за 3 минуты 4 секунды)
   Post subject:
Reply with quote

Запрет выделения для браузеров
Code (css): скопировать код в буфер обмена
body {
        /* Mozilla */
        -moz-user-select: none;

        /* Opera */
        -o-user-select:none;
               
        /* Safari */
         -khtml-user-select: none;
}
Code (JavaScript): скопировать код в буфер обмена
/* Internet Explorer */
if (/Explorer/.test(navigator.userAgent))
        document.body.onselectstart = new Function("return false;");
Ну как? :)

С ув. Сергей Кокшаров.
marqueetool.net - Javascript Rectangular Marquee Tool
Back to top
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Mar 04, 2007 2:42 pm (спустя 6 часов 21 минуту; написано за 5 секунд)
   Post subject:
Reply with quote

Сергей Кокшаров wrote:
-o-user-select:none;
Начиная с какой версии это работает?
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Sun Mar 11, 2007 3:12 pm (спустя 7 дней 30 минут; написано за 19 секунд)
   Post subject:
Reply with quote

c 9-ой точно.
Back to top
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Sun Mar 11, 2007 3:56 pm (спустя 43 минуты; написано за 1 минуту 19 секунд)
   Post subject:
Reply with quote

Гость wrote:
c 9-ой точно.
Не-а! Мои две "девятки" (Version 9.00 Build 8212 и Version 9.10 Build 8679) меня в этом деле (-o-user-select:none) разочаровали... :(
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri Mar 16, 2007 9:17 am (спустя 4 дня 17 часов 21 минуту; написано за 1 минуту 13 секунд)
   Post subject:
Reply with quote

да, проверили -o-user-select. не работает. видать пропарился :(
значит для оперы один способ
document.onmousedown = function(event) {event.preventDefaults();}
(не проверенено)
Back to top
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Fri Mar 16, 2007 11:23 am (спустя 2 часа 5 минут; написано за 1 минуту 38 секунд)
   Post subject:
Reply with quote

Гость wrote:
preventDefaults(
Это св-во надо писать в единственном числе (preventDefault), или Вы хотите отменить все возможные поведения по-умолчанию? :)
Вообще, если бы все было так просто, то этой темы здесь бы не было...
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sat Mar 17, 2007 12:02 am (спустя 12 часов 39 минут; написано за 29 секунд)
   Post subject:
Reply with quote

AKS wrote:
если бы все было так просто, то этой темы здесь бы не было...
Теперь понятно, почему, фактически, нигде нет внятного ответа на мой вопрос :).
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Thu Apr 12, 2007 2:53 pm (спустя 26 дней 14 часов 51 минуту; написано за 3 минуты 19 секунд)
   Post subject:
Reply with quote

Ещё 5 копеек в тему =)
Для Оперы (и всех остальных) я нашёл если не самый лучший, то вполне эффективный метод запрещения выделения:
Во время таскания объекта можно
а) восстанавливать изначальное выделение через window.getSelection()
б) просто сбрасывать его

Что интересно, этот метод вообще не тормозит.
Правда, я не пробовал таскать блоки над большим количеством выделенного текста для первого варианта.

Тест второго варианта: debugger.ru/temp/em/3.html
Back to top
View user's profile Send private message
Алексей Нестеров
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Aug 27, 2007 11:04 pm (спустя 4 месяца 15 дней 8 часов 10 минут; написано за 19 секунд)
   Post subject: К слову
Reply with quote

У меня таких проблем не возникало novastudio.org.ua/windows/
Back to top
AKS
Участник форума



Joined: 28 Dec 2005
Posts: 1174
Карма: 102
   поощрить/наказать


PostPosted: Tue Aug 28, 2007 11:07 am (спустя 12 часов 3 минуты; написано за 2 минуты 59 секунд)
   Post subject:
Reply with quote

Алексей Нестеров wrote:
У меня таких проблем не возникало...
А я заметил, окрыв вашу страничку в браузере, который в данной теме считается проблемным (т.е. Opera). Даже в Opera 9.22 можно увидеть "блики" выделения, не говоря уже про версии 7 и 8, которые выделяют все подряд. А что будет в "девятке", если на странице будет побольше текста?
Back to top
View user's profile Send private message Send e-mail
Eloy
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Aug 19, 2008 12:54 pm (спустя 11 месяцев 22 дня 1 час 46 минут; написано за 47 секунд)
   Post subject:
Reply with quote

<body onSelectStart = "return false;" onmousedown = "return false;">
работает в Mazila, IE, и Opera в версии 9.26 меньше не пробовал
Back to top
EDU
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Nov 05, 2008 5:27 pm (спустя 2 месяца 17 дней 4 часа 32 минуты; написано за 35 секунд)
   Post subject:
Reply with quote

Такой сброс не подойдет?
        function clearSelection()
        {
            var sel;
            if(document.selection && document.selection.empty)
            {
                document.selection.empty();
            }
            else if(window.getSelection)
            {
                sel = window.getSelection();
                if(sel && sel.removeAllRanges)
                sel.removeAllRanges();
            }
        }
Взято отсюда: snowcore.blogspot.com/2008/04/prevent-text-selection.html
Back to top
EDU
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Nov 05, 2008 5:35 pm (спустя 7 минут; написано за 2 минуты 4 секунды)
   Post subject:
Reply with quote

P.S. Давно юзаю подобное своей функциии для Drag'n'Drop при простановке новых координат таскаемого элемента. Пока багов не наблюдал.
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Tue Nov 18, 2008 10:17 pm (спустя 13 дней 4 часа 42 минуты)
   Post subject:
Reply with quote


М

Перенесено из форума: Склад готовых решений :: JavaScript.
Перенесено в форум: Разное :: JavaScript.
Back to top
View user's profile Send private message
Гость
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Nov 24, 2008 12:55 pm (спустя 5 дней 14 часов 37 минут; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

Eloy wrote:
<body onSelectStart = "return false;" onmousedown = "return false;">
работает в Mazila, IE, и Opera в версии 9.26 меньше не пробовал
Как раз не работает в Мозилле :)
Back to top
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Tue Jan 06, 2009 3:48 pm (спустя 1 месяц 12 дней 2 часа 52 минуты; написано за 4 минуты 19 секунд)
   Post subject:
Reply with quote

Таки, сладить с оперой можно через псевдо-элемент "::selection". Он правда ничего не запрещает, но позволяет управлять внешним видом выделения
Code (css): скопировать код в буфер обмена
.no-select{
    /* запрет выделения для мозиллы и сафари */
    -moz-user-select: none;
    -webkit-user-select: none;
}

/* CSS3. В опере пока запретить выделения нельзя но можно убрать визуальный эффект. */
.no-select::selection { color: inherit }
Back to top
View user's profile Send private message
Danilka
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Jan 10, 2009 4:00 pm (спустя 4 дня 12 минут; написано за 2 минуты 27 секунд)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
function selectable( elem, bool ){
        //elem = document.getElementById( id );
        if ( !elem ) return;
        elem.unselectable = bool ? "off" : "on"; // IE
        elem.onselectstart = function(){ return bool; }; // IE
        if ( elem.style ) elem.style.MozUserSelect = bool ? "" : "none"; // FF
}
Code (html): скопировать код в буфер обмена
<img (december.com/html/4/element/img.html) onLoad="function selectable( this, false );" onMouseDown="...; return false;" src="..."> (december.com/html/4/element/.html)
+ если хочется, то можно активировать выделение.
Back to top
Danilka
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Jan 10, 2009 4:04 pm (спустя 4 минуты; написано за 3 минуты 12 секунд)
   Post subject:
Reply with quote

Простите, описался.[исправлено] onLoad="function selectable( this, false );"
Если нужно, то можно вызвать не из элемента, а откуда угодно, но тогда по id сначала выбрать, а после уже передавать элемент. Ну там кусок закаментирован, должно быть понятно.
Работает во всех браузерах, которые у меня есть на машине: Chrome, FF3, Opera9, Safari3.2 win, IE6, IE7.

p.s. Ну и кривой же у форума парсер или js кнопки..
Back to top
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Sat Jan 10, 2009 6:49 pm (спустя 2 часа 44 минуты; написано за 23 секунды)
   Post subject:
Reply with quote

Danilka,
Quote:
p.s. Ну и кривой же у форума парсер или js кнопки..
Что кривое?

Ваш пост сейчас исправлю.
Back to top
View user's profile Send private message Send e-mail
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Mon Jan 12, 2009 12:30 am (спустя 1 день 5 часов 41 минуту; написано за 8 минут 33 секунды)
   Post subject:
Reply with quote

Danilka, не очень-то удобно для текстовых нодов в верстке. Тогда уж так:
Code (css): скопировать код в буфер обмена
*[unselectable="on"]{
    -moz-user-select: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
}

*[unselectable="on"]::selection { color: inherit }
и управлять в js:
Code (JavaScript): скопировать код в буфер обмена
htmlElement.setAttribute('unselectable','off')
htmlElement.setAttribute('unselectable','on')
В реальном проекте не очень сложно записать rules'ы в styleSheets document'а. Это, имхо, наиболее кроссбраузерно.

ЗЫ.
Ах-ты черт, забыл про особенность этого unselectable не распространять действие на дочерние узлы )-: Все приходится делать через оное место.
Code (css): скопировать код в буфер обмена
<style type="text/css">

.unselectable {
    -moz-user-select: none;     /* Mozilla Firefox */
    -khtml-user-select: none;   /* Konqueror, Safary, Chrome. Останется ли поддержка в будущем ? */
    -webkit-user-select: none/* Safary, Chrome */
    user-select: none;          /* CSS3 -- на будущее */
    behavior: expression(       /* MSIE perversion */
        ( this.onselectstart = function(){ return !(1+(' ' + this.className + ' ').indexOf(' unselectable ')) } ),
        ( this.style.behavior = null ) /* одноразовый expression */
    );
}

/* CSS3. В опере пока запретить выделения нельзя, но можно убрать визуальный эффект. */
.unselectable::selection { color: inherit }
</style>
Code (html): скопировать код в буфер обмена
<b (december.com/html/4/element/b.html) class="unselectable"> (december.com/html/4/element/.html)</b><b (december.com/html/4/element/b.html) class="unselectable" id="d1"> (december.com/html/4/element/.html)</b><br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)<button (december.com/html/4/element/button.html) onclick=" document.getElementById('d1').className = 'unselectable' "> (december.com/html/4/element/.html)unselectable</button>
<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)<button (december.com/html/4/element/button.html) onclick=" document.getElementById('d1').className = '' "> (december.com/html/4/element/.html)selectable</button>
Back to top
View user's profile Send private message
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Mon Jan 12, 2009 4:00 pm (спустя 15 часов 30 минут; написано за 43 секунды)
   Post subject:
Reply with quote

Неплохо бы добавить возможность выделять текст в input'ах и textarea. В presto и khtml/webkit ничего делать не надо, они сами умные, в msie добавляем проверок, а вот с Фоксом не получается сладить, "-moz-user-select: normal !important;" он не понимает (( Как побороть ?
Code (css): скопировать код в буфер обмена
<style type="text/css">
.unselectable {
    -moz-user-select: none;     /* Mozilla Firefox */
    -khtml-user-select: none;   /* Konqueror, Safary, Chrome. Останется ли поддержка в будущем ? */
    -webkit-user-select: none/* Safary, Chrome */
    user-select: none;          /* CSS3 -- на будущее */
    behavior: expression(       /* MSIE perversion */
        (
            this.onselectstart = function() {
                return (/^(?:INPUT|TEXTAREA)$/).test( event.srcElement.tagName ) ?
                    event.cancelBubble = true : /* Оставить в покое input и textarea */
                    (' ' + this.className + ' ').indexOf(' unselectable ') < 0
            }
        ),
        ( this.style.behavior = null ) /* одноразовый expression */
    );
}
/* CSS3. В опере пока запретить выделения нельзя но можно убрать визуальный эффект. */
.unselectable::selection { color: inherit }
/*
    Presto и KHTML/WebKit-браузеры не меняют поведения input'ов и textarea, что очень хорошо.
    С MSIE боремся проверками.
    А вот что делать с FF ?
*/

input, textarea {
    /* Фоксу ни normal ни text не помогают! Причем на специфицированный normal Фокс ругается. Как побороть? */
    -moz-user-select: normal !important;
    user-select: normal !important;
}
</style>
Back to top
View user's profile Send private message
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Wed Jan 14, 2009 7:54 am (спустя 1 день 15 часов 53 минуты; написано за 5 минут 31 секунду)
   Post subject:
Reply with quote

Нашел решение: forum.mozilla-russia.org/viewtopic.php?pid=103584
Все возможные рабочие значения для -moz-user-select:
Code (any language): скопировать код в буфер обмена
none
text
element
elements
all
toggle
tri-state
auto        // internal value - please use nsFrame::IsSelectable()
-moz-all    // force selection of all children, unless an ancestor has NONE set - bug 48096
-moz-none   // Like NONE, but doesn't change selection behavior for descendants whose user-select is not AUTO.
Забавно, но здесь нет указанного в доках normal ))
Соответственно стили будут такими:
Code (css): скопировать код в буфер обмена
.unselectable {
    -moz-user-select: -moz-none/* Mozilla Firefox */
    -khtml-user-select: none;     /* Konqueror, Safary, Chrome. Останется ли поддержка в будущем ? */
    -webkit-user-select: none;    /* Safary, Chrome */
    user-select: none;            /* CSS3 -- на будущее */
    behavior: expression(         /* MSIE perversion */
        (
            this.onselectstart = function() {
                return (/^(?:INPUT|TEXTAREA)$/).test( event.srcElement.tagName ) ? /* если input или textarea */
                    event.cancelBubble = true :                                    /* оставить их в покое, иначе -- */
                    (' ' + this.className + ' ').indexOf(' unselectable ') < 0     /* -- в зависимости от наличия класса unselectable */
            }
        ),
        ( this.style.behavior = null ) /* одноразовый expression */
    );
}

/* CSS3. В опере пока запретить выделения нельзя но можно убрать визуальный эффект. */
.unselectable::selection { color: inherit }
Имеет ли смысл убирать "-khtml-user-select", вроде Konqueror сейчас тоже на вебките?
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Wed Jan 14, 2009 9:22 am (спустя 1 час 28 минут; написано за 48 секунд)
   Post subject:
Reply with quote

Denis Usenko wrote:
                    event.cancelBubble = true : /* оставить их в покое, иначе -- */
                    (' ' + this.className + ' ').indexOf(' unselectable ') < 0 /* -- в зависимости от наличия класса unselectable */
Учитывая привязку стиля к названию класса данные строчки лишены смысла.
Back to top
View user's profile Send private message
Denis Usenko
Участник форума



Joined: 06 Feb 2006
Posts: 54
Карма: 13
   поощрить/наказать


PostPosted: Wed Jan 14, 2009 11:03 am (спустя 1 час 40 минут; написано за 12 минут 30 секунд)
   Post subject:
Reply with quote

WingedFox,
Если бы это был гипотетический "-msie-user-select: expression( посчитать и вернуть )" -- то тогда да, смысла бы не было. А здесь behavior используется чтобы повесить обработчик onselectstart на нужный элемент, после чего класс в стилях и элемент уже никак не связаны, то есть если элемент лишить класса, обработчик останется висеть.
Причем каждый раз при установке класса оonselectstart будет устанавливаться заново, а если бы не было удаления "this.style.behavior = null", то и при каждом reflow.

Вот пример, можно пощелкать, попереключать классы в браузере:
Code (css): скопировать код в буфер обмена
<style type="text/css">
.us1 {
    behavior: expression(
        (
            this.onselectstart = function() {
                return (/^(?:INPUT|TEXTAREA)$/).test( event.srcElement.tagName ) ?
                    event.cancelBubble = true :
                    (' ' + this.className + ' ').indexOf(' us1 ') < 0
            }
        ),
        ( this.style.behavior = null )
    );
}

.us2 {
    behavior: expression(
        (
            this.onselectstart = function() {
                return (/^(?:INPUT|TEXTAREA)$/).test( event.srcElement.tagName )
            }
        ),
        ( this.style.behavior = null )
    );
}
</style>
Code (html): скопировать код в буфер обмена
<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)<button (december.com/html/4/element/button.html) onclick=" document.getElementById('d1').className = 'us1' "> (december.com/html/4/element/.html)unselectable</button>
<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)<button (december.com/html/4/element/button.html) onclick=" document.getElementById('d1').className = '' "> (december.com/html/4/element/.html)selectable</button>

<div (december.com/html/4/element/div.html) id="d1"> (december.com/html/4/element/.html)Когда речь идет о галактиках, восход оценивает непреложный ионный хвост, хотя для имеющих глаза-телескопы туманность Андромеды показалась бы на небе величиной с треть ковша Большой Медведицы</div>

<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)<button (december.com/html/4/element/button.html) onclick=" document.getElementById('d2').className = 'us2' "> (december.com/html/4/element/.html)unselectable</button>
<br (december.com/html/4/element/br.html) /> (december.com/html/4/element/.html)<button (december.com/html/4/element/button.html) onclick=" document.getElementById('d2').className = '' "> (december.com/html/4/element/.html)selectable</button>

<div (december.com/html/4/element/div.html) id="d2"> (december.com/html/4/element/.html)Терминатор, в первом приближении, точно вызывает перигелий, данное соглашение было заключено на 2-й международной конференции "Земля из космоса - наиболее эффективные решения".</div>
------
PS. Нашел сегодня отличную статью по expression: lusever.livejournal.com/15868.html. Так что код можно еще уменьшить убрав из expression'ов this
Back to top
View user's profile Send private message
matiash
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Sep 07, 2009 5:22 pm (спустя 7 месяцев 24 дня 6 часов 18 минут; написано за 12 секунд)
   Post subject: Спасибо
Reply with quote

ААААа, спасибо Denis Usenko!!!Denis Usenko
Back to top
matiash
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Sep 07, 2009 5:23 pm (спустя 48 секунд; написано за 19 секунд)
   Post subject:
Reply with quote

Ты крутой чувак!!!
Back to top
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Mon Sep 07, 2009 5:30 pm (спустя 7 минут; написано за 34 секунды)
   Post subject:
Reply with quote


М

matiash,
вы знаете значение слова "чувак"? Прямо скажем, оно не очень хорошее...
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page Previous  1, 2
Page 2 of 2    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML