Toon posts:

[JS] Selecteren weer aanzetten binnen onselectstart element

Pagina: 1
Acties:

Verwijderd

Topicstarter
Stel ik heb een tabel, deze staat vol met waardes. In sommige cellen staan <input type="text"> velden.
Nou heb ik op de tabel met JavaScript gezorgd dat de inhoud niet te selecteren is, dit it nodig. Hiervoor gebruik ik de onselectstart = function() { return false; }.

Als ik nu de tekst binnen een <input type="text"> veld wil selecteren, werkt dit niet meer vanwege de overkoepelende onselectstart = function() { return false; }...

Hoe kan ik zorgen dat ik binnen dieper liggende elementen wèl weer tekst kan selecteren?

Ik heb geprobeerd:
JavaScript:
1
2
3
onselectstart = function() { }

onselectstart = function() { return true; }

Alvast bedankt!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Uit mijn hoofd:

Hang een rel="noselect" ding aan je inputvelden die je niet mag selecteren:
HTML:
1
<input type="text" name="tekst" rel="noselect"/>

Doe onload() het volgende uitvoeren:
JavaScript:
1
2
3
4
5
6
7
8
noselect=document.getElementsByTagName('input');
for (num=0; num<noselect.length; num++)
    {
        if (noselect[num].getAttribute("rel") == "noselect")
            {
                noselect[num].onselectstart=function() { return false; }
            }
    }

Niet getest, maar hiermee moet je wel een einde komen, desgewenst kan je het trouwens ook via een class doen (met className), maar dat sloopt je scheiding tussen opmaak en code.

[ Voor 11% gewijzigd door AtleX op 21-09-2005 13:28 ]

Sole survivor of the Chicxulub asteroid impact.


Verwijderd

Topicstarter
Volgens mij begrijp je me verkeerd... Ik wil namelijk voor bijv. een <table> element zorgen dat ie in het hele <table> element niks kan selecteren, vandaar dus (pseudo-code) <table onselecstart=function() { return false; }>.

Daarnaast wil ik in sommige <td> elementen wèl weer kunnen selecteren. Omdat die <td> elementen child nodes zijn van <table> krijgen ze de overkoepelende onselectstart = function() { return false; } mee en kunnen ze niet worden geselecteerd.

Ik wil dus uitzonderingen maken voor child elementen...

[edit] Ik zou dus in wijze willen weten hoe ik onselectstart weer naar zijn 'default behavior' zou kunnen verwijzen. Dat ie dus weer gaat selecteren zoals normaal.

[ Voor 19% gewijzigd door Verwijderd op 21-09-2005 13:33 ]


Verwijderd

Topicstarter
Volgens mij ben ik erachter... Ik geloof dat ik het als volgt kan doen:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">

    <script type="text/javascript">
    window.onload = function() {
        if (document.getElementById && document.getElementsByTagName) {
            var form = document.getElementsByTagName('form').item(0);
            form.onselectstart = function() { return false; }

            var test = document.getElementById( 'test' );
            test.onselectstart = null;
        }
    }
    </script>
  </head>
<body>

<form>
    <textarea id="test"></textarea>
</form>

</body>
</html>

Het child element dus een onselectstart = null; geven.

[ Voor 18% gewijzigd door Verwijderd op 21-09-2005 14:00 ]


Verwijderd

Topicstarter
Volgens mij had ik valse hoop, want de tekst kan ik nog steeds niet selecteren als ik onselectstart = null; doe...

Iemand een idee??

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
code:
1
onselectstart = function () { return (true); }

If I can't fix it, it ain't broken.


Verwijderd

Topicstarter
Verwijderd schreef op woensdag 21 september 2005 @ 13:20:

Ik heb geprobeerd:
JavaScript:
1
2
3
onselectstart = function() { }

onselectstart = function() { return true; }

Alvast bedankt!
Volgens mij lezen mensen niet zo goed of zo......

return (true); maakt helaas niets uit...

[ Voor 8% gewijzigd door Verwijderd op 21-09-2005 15:03 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Kan je het event niet cancellen (je event.cancelbubble op true zetten)?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Misschien dat je juist op de elementen waarin je niet mag selecteren de onselectstart (return false) kan zetten, dan werkt het in ieder geval lijkt mij.

Ik denk dat die andere methoden niet werken omdat de events door 'bubblen' naar een hoger niveau, misschien dat je daarom hier wat aan hebt.

edit: btm909 was me net voor :9 , maar in bovenstaande link vind je een cross browser oplossing om bubbling te voorkomen.

[ Voor 17% gewijzigd door Borizz op 21-09-2005 15:10 ]

If I can't fix it, it ain't broken.


Verwijderd

Topicstarter
BtM909 schreef op woensdag 21 september 2005 @ 15:07:
Kan je het event niet cancellen (je event.cancelbubble op true zetten)?
Thanks, cancelBubble = true; werkt goed om de bubbling van het child element naar parent en andere bovenliggende elementen te voorkomen.

Nou vroeg ik me af... In Mozilla (/Gecko) gebruik ik in CSS -moz-user-select: none;, en probeer ik in het child element een -moz-user-select: normal; ('normal' of 'text'), maar hier heb ik waarschijnlijk ook weer te maken met event bubbling...

Hoe kan ik dit in Mozilla afvangen? De onselectstart event is IE only, en het niet kunnen selecteren doe ik via CSS...
Pagina: 1