Autor Zpráva
Suta
Profil
Věděl by někdo, jak vyzrát na Firefox a Operu v situaci, kdy kód pro deaktivaci výběru textu spouštím až při odpálení události onmousedown?

Deaktivace se mi projeví až při opětovném výběru textu (všech následujících událostí onmousedown), ale uchopím-li prvek (držím mousedown, přičemž ve stejném okamžiku dojde k deaktivaci výběru textu) a poté prvkem přesouvám, Opera a Firefox text vybírá a dojde tak k nežádoucímu efektu.
Str4wberry
Profil
Neměl bys živou ukázku?
Suta
Profil
Živou ukázku nemám. Nicméně.. Dříve jsem používal kód zhruba na tomto principu (pro názornost zjednodušeno).

function stopSelectingText() {
    document.onselectstart = function() {
        return false;
    }
    document.ondragstart = function() {
    return false;
    }
    document.onmouseup = function() {
        document.onselectstart = null;
        document.ondragstart = null;
        document.onmouseup = null;
    })
}

element.mousedown = function(e) {
    stopSelectingText();
    // --- při mousemove probíhá třeba přesun objektu ---
}

Dnes jsem metodu stopSelectingText() - volanou při mousedown (při zahájení samotného posunu) vyměnil za metodu jQuery disableSelection volanou nad dokumentem, má naprosto stejný problém.

Pokud však v kódu výše nespustím mouseup a nezruším tak zamezení výběru textu, při dalším mousedown už zamezení výběru textu funguje správně ve všech prohlížečích.

Vím ještě, že opera zastaví výběr textu, pokud v mousedown vrátím return false. To si však dovolit nemůžu.
Chamurappi
Profil
Reaguji na Sutu:
Většinou to dělám tak, že při onmousedown jednoduše zruším výběr:
if(document.selection && document.selection.empty)
{
  document.selection.empty();
}
else if(window.getSelection)
{
  var sel = window.getSelection();
  if(sel && sel.removeAllRanges) sel.removeAllRanges();
}
Ostatní události neřeším. (Leda ten ondragstart někdy stornovávám, podle toho, co se přetahuje…)

Dnes jsem metodu stopSelectingText() […] vyměnil za metodu jQuery disableSelection volanou nad dokumentem
Což je docela zbytečná informace, když chybí popis, co a jak vlastně ta metoda disableSelection dělá.
Suta
Profil
Chamurappi:
No jo, funguje všude. Jen aktuálně vybraný text odznačí pouze při mousedown, při mousemove a pohybu objektem k vybírání textu opět dochází.

Při navázání na mousemove funguje bezchybně všude, takže řešení mám, jen mírně hard-rockové. Pokud máš ještě něco lepšího, budu rád. Ale i tak díky moc, problém vyřešen (po stránce fungování ve (snad) všech prohlížečích).
peta
Profil
onmouseover presmerujes udalost onmousedown na svuj script s return false. Neco podobneho najdes v prikladech na jakpsatweb, zakazani udalosti. Zakaz pouziva i Suta v prikladu nahore.
Suta
Profil
peta:
Dodatek bez přínosu. Suta, který nahoře používá příklad, jsem i já. A na tom samém místě o kousek dále pak Suta uvádí, že return false nemůže použít.
Chamurappi
Profil
Reaguji na Sutu:
při mousemove a pohybu objektem k vybírání textu opět dochází
Překryj celou plochu průsvitnou plachtou, která další označení znemožní.

Pokud máš ještě něco lepšího, budu rád.
Mám ještě -moz-user-select: none.

o kousek dále pak Suta uvádí, že return false nemůže použít
Proč vlastně nemůže?
Str4wberry
Profil
Mám ještě -moz-user-select: none.

Když už to Chamurappi zmiňuje, tak by šlo také použít ::selection a výběr textu tak zakamuflovat.
Suta
Profil
Chamurappi:
Proč vlastně nemůže?
V určitých situacích, kdy zahájím přesouvání prvků a chci používat klasicky nastavený css:hover při přejíždění nad položkami, do nichž má být přesouvaný element vložen, mi Opera a ještě jeden (nevím teď který) prohlížeč css:hover nezobrazí díky nastavenému return false u mousedown nad dokumentem. Odstraněním return false tento problém odpadá. Vysvětlení neznám, vím jen, že jsem tuto příčinu dlouho hledal.

Edit:
Překryj celou plochu průsvitnou plachtou, která další označení znemožní.
Tento trik používám, jen v jiných případech. Obávám se, že css:hover efekt by opět nefungoval díky překrytí elementem s vyšším z-indexem, hlavně bych ale jako cíl mousetargetu měl stále tento překryvný div.

Díky tobě i Str4wberrymu za přínosné postřehy.
peta
Profil
Suta: Tak pro problemove prohlizece muzes zkusit kamuflovat i hover efekt pomoci onmouseover. Treba to bude fungovat. Ale u Opery bych na nejakou funkcnost cehokoliv moc nespolehal.
Suta
Profil
peta:
Pomocí mouseover by hover efekt fungoval, událostem najetí či odjetí z elementu se však obecně kvůli komplexnosti projektu snažím vyhnout co nejvíce. Nechám si to až jako poslední možnost.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0