Delete van selected text detecteren

Status
Niet open voor verdere reacties.

SamWitse

Gebruiker
Lid geworden
20 nov 2008
Berichten
28
Yo,

Met een OnKeyPress kan ik volgen van een user in een textarea tikt.
Ook de delete en backspace kan ik vaststellen in OnKeyPress.
Zo weet ik precies op elk moment welke tekst een user aan het intikken is.

Alleen, als een user een blok tekst uit de textarea selecteert, en dan een letter tikt, wordt de tekstblok vervangen door die ene letter. Hoe kan ik detecteren dat een tekstblok vervangen is, wat de inhoud daarvan was en op welke plaats in de tekstarea die stond?

Bijvoorbeeld, een tekstarea bevat 'Hallo stad, hier ben ik'.
De user selecteert het woord stad, en tikt de letter 'w' in.
Dan wil ik weten dat 'stad' weggevaagd is, en dat dit op positie 6 stond van mijn tekst.

Dank alvast voor alle tips.

Sam.
 
Het meest waterdichte is daarom ook om hem van de eerste keer de hele tekst te geven ipv de letter die op dat moment wordt ingetikt:

Code:
<TEXTAREA onkeypress="DoSomething(this.innerHTML)"></TEXTAREA>

Als je dit doet kan je hem bijvoorbeeld de vorige waarde van het textveld in een globale variabele laten steken, zodat je de nieuwe waarde met de oude kan laten vergelijken.
 
Laatst bewerkt:
Maar bij het onkeypress is de waarde nog niet veranderd. Je hebt namelijk nog de kans te voorkomen dat de verandering doorgaat. De selectie van een element detecteren kan zo:

Code:
function getCursor(obj)
{
  if (typeof obj.selectionStart != 'undefined')
  {
    return Array(obj.selectionStart, obj.selectionEnd);
  }
  else if (document.selection && document.selection.createRange)  // Microsoft kon zich weer eens niet aan de standaard houden
  {
    obj.focus();
    var range	= document.selection.createRange();
    var r2	= range.duplicate();
    start	= 0 - r2.moveStart('character', -100000000);
    end		= start + range.text.length;
    return Array(start, end);
  }
  return false;
}

Deze functie geeft een array. Het eerste element is het begin van de selectie, het tweede element het einde. Indien het begin en einde gelijk zijn is er dus geen selectie. Je zou het ook kunnen aanpassen om het begin en de lengte van de selectie te geven. In dat geval zou een lengte 0 dus betekenen dat er geen selectie was.
 
Laatst bewerkt:
Bedankt beiden!

Ik ga eens checken of het vergelijken van de oude string met de nieuwe bij een OnKeyUp een zinvolle oplossing is; lijkt mij in alle geval het eenvoudigst.

Sam
 
Dat hangt er van af wat je wilt natuurlijk. Je zult een duidelijk merkbare tijd hebben tussen het veranderen van de tekst door de gebruiker en een keyup event. Als je de text dus wilt aanpassen terwijl de gebruiker typt dan is onkeyup geen goed idee. Als het iets achter de schermen is waar de gebruiker niets van merkt dan misschien wel. Maar dat hangt er ook weer vanaf wat je precies wilt doen.

Je merkt het vanzelf wel, maar het kan behoorlijk wat tijd schelen als je van te voren weet of de tijd tussen character-input en keyup verwaarloosbaar is. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan