Ik doe iets verkeerd....

Status
Niet open voor verdere reacties.

ErnstM

Gebruiker
Lid geworden
28 jan 2007
Berichten
32
Hallo allemaal,
ik heb even een vraagje (misschien een domme, maar ik ben nog niet zo lang bezig met javascript).

Ik ben op mijn site een tekst veld aan het maken. Nu is het zo dat als je tijdens het typen op enter klikt, je naar de volgende regel springt. Dat is vrij logisch, maar als de tekst later als html word opgeslagen dan haalt hij die regel er weer tussen uit. Er moet dus een <br> code in komen te staan.
Nu wil ik dat die code word geplaatst op het moment dat je op enter klikt.

Hiervoor gebruik ik nu de volgende code:
<script language="javascript">
<!--
function displayKeyCode(evt)
{
var textBox = getObject('txt');
var charCode = (evt.which) ? evt.which : event.keyCode
textBox.value = String.fromCharCode(charCode);

if (charCode == 13) textBox.value = "<br>"; // enter


var lblCharCode = getObject('spnCode');
lblCharCode.innerHTML = 'KeyCode: ' + charCode;

return false;

}
function getObject(obj)
{
var theObj;
if (document.all) {
if (typeof obj=='string') {
return document.all(obj);
} else {
return obj.style;
}
}
if (document.getElementById) {
if (typeof obj=='string') {
return document.getElementById(obj);
} else {
return obj.style;
}
}
return null;
}
//-->
</script>

En dan is dit mijn tekstvak:
<textarea name='txt' ONKEYPRESS="javascript:return false;" ID="txt" ONKEYDOWN="javascript:return displayKeyCode(event)" wrap='on' rows='20' cols='80' ></textarea>

Het probleem is nu, dat als je op enter klikt, alle vorige tekst word weggehaald, en er alleenmaar <br> komt te staan. Is het mogenlijk dat hij dat 'InsertAtCursor' kan, en dat de cursor dan toch naar de volgende regelverplaatst?

Bedankt voor het lezen,
Ernst
 
HTML:
textBox.value = String.fromCharCode(charCode);

if (charCode == 13) textBox.value = "<br>"; // enter
aanpassen zodat je eerste de vorige inhoud ophaalt, en dan terugschrijft.

HTML:
var deInhoud = textBox.value;
textBox.value = deInhoud + String.fromCharCode(charCode);

if (charCode == 13)
    textBox.value = deInhoud + "<br>\n"; // enter
die \n zou ervoor moeten zorgen dan je cursor naar de volgende lijn wordt verplaatst.

--Johan
 
HTML:
<!--
 function displayKeyCode(evt)
 {
	var textBox = getObject('txt');
	 var charCode = (evt.which) ? evt.which : event.keyCode;
	 var deInhoud = textBox.value;
	textBox.value = deInhoud + String.fromCharCode(charCode);

	  if (charCode == 13)   textBox.value = deInhoud + "<br>\n"; // enter


	 var lblCharCode = getObject('spnCode');
	lblCharCode.innerHTML = 'KeyCode:  ' + charCode;

	return false;

 }
 function getObject(obj)
  {
	  var theObj;
	  if (document.all) {
		  if (typeof obj=='string') {
			  return document.all(obj);
		  } else {
			  return obj.style;
		  }
	  }
	  if (document.getElementById) {
		  if (typeof obj=='string') {
			  return document.getElementById(obj);
		  } else {
			  return obj.style;
		  }
	  }
	  return null;
  }
 //-->

Dat is wat ik nu heb, maar nu typt hij in het textvak alleen nog maar hoofdletters, deleten werkt niet meer, backspace'en ook niet meer, en alle leestekens zijn veranderd.

Hoe kan ik dat dan voorkomen ?

Iniedergeval al bedankt voor het reageren!
 
Je hoeft de 'enter' alleen te gebruiken om aan te geven dat de tekst verwerkt moet worden.

De tekst haal je daarna gewoon uit het formulier met:
var tekst = document.forms[0].txt.value;

en verwerk je met:
tekst = tekst.replace(/\&/g,'&amp;');
tekst = tekst.replace(/\</g,'&lt;');
tekst = tekst.replace(/\>/g,'&gt;');
tekst = tekst.replace(/\r?\n/g,'<br>');



Vr.Gr. Egel.
 
Hallo Egel,
Ik snap wat je bedoelt met je script, maar hoe zet ik dat neer in mijn php script ?
kan je een voorbeeldje geven?
Alvast heel erg bedankt!
 
Code:
<html>
 <head>
  <title>Textarea => innerHTML | Egel 060129 ;)</title>
  <script type="text/javascript">
   function gebruik(text) {
    text = text.replace(/\&/g,'&amp;');
    text = text.replace(/\</g,'&lt;');
    text = text.replace(/\>/g,'&gt;');
    text = text.replace(/\"/g,'&quot;');
    text = text.replace(/\r?\n/g,'<br>');
    document.getElementById('tekst').innerHTML = text;
    };
  </script>
 </head>
 <body>
  <form name="f"><textarea name="t" cols="64" rows="12" onkeyup="gebruik(this.value)">Test 1234,
een nieuwe regel.
<&> werken ook.</textarea></form>
  <div id="tekst"></div>
 </body>
</html>
Zoiets? Dit kopieert wat in het tekstvak staat naar de div en vertaald de 'gevoelige' tekens naar html: < & > " en een nieuwe regel.


Vr.Gr. Egel.
 
Bedankt!
Het wordt steeds beter, maar nog niet precies wat ik bedoel...
Ik wil dat als ik op de send knop stuur, dat de tekst dan naar de volgende pagina word verstuurd. En op die volgende pagina staat dan:
PHP:
<?php
$tekst = $_POST['waardetekstveld'];
?>
<html>
 <body>
<?php
echo $tekst;
?>
</body>
</html>

En dan is het de bedoeling dat als hij dan die tekst echo't dat je dan al die wit regels/ enters krijgt. Dus die <br> tekens moeten in de textarea komen te staan eigenlijk. Of heb je een andere manier ?
 
Probeer dit eens:
PHP:
<html>
 <body>
<?php
$tekst = $_POST['waardetekstveld'];
$invoer = array('/&/','/\</','/\>/','/"/','/\r?\n/');
$uitvoer = array('&amp;','&lt;','&gt;','&quot;','<br>');
echo preg_replace($invoer, $uitvoer, $tekst);
?>
 </body>
</html>
dan worden de tekens vervangen door de php. Geen javascript meer nodig. :)


Vr.Gr. Egel.
 
Ik heb het enig sinds aangepast. Ik wilde namelijk dat de tekst <br> letterlijk werd gerpint zodat ik hem naar de database kon schrijven. Maar door hem nooit te printen op het scherm werkt het zoals ik wil.

Het werkt :D!
Ontzettend bedankt Johantrax en vooral Egel!


Vriendelijk groet,
Ernst
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan