• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

function als methode oder wie ich eine function einbinde

koschernostra

New member
hallo nachdem ich mir dei letzten 2 tage die finger wundegoogled habe, wende ich mich an euch.
ich hoffe die überschrift verwierrt nicht ich, wusste nicht wie ich es nennen soll.
ich habe folgendes script:
Code:
<script type="text/javascript">
function change(){  
 var r = match("l");
 if (r){
 	var w = replace(/\l/g,"LOL");
 }}

function dochange () {
  neu = document.Test.Eingabe.value.change();
  document.Test.Eingabe.value = neu;
}
</script>

<form name="Test" action="">
<input type="text" name="Eingabe">
<input type="button" value="change it" onclick="dochange()">
</form>

und zwar möchte ich wenn man z.b. "hallo" ins textfeld tipt und den button drückt, daraus "haLOLLOLo" wird.
nur leider geht es nicht, in einem tut wo der inhalt durch die toUpperCase() methode groß gemacht wird geht es.

ich wäre sehr sehr dankbar wenn ich hilfe bekommen würde, bin schier am verzweifeln :)
lg
 
Zuletzt bearbeitet:
In der Fehlerkonsole steht, warum dein Ansatz nicht funktioniert.

So wie es mir scheint, hast du den Unterschied zwischen Funktionen und Methoden in JS nicht nicht ganz verinnerlicht. Anscheinend kommst du aus der Java-Ecke, wo es keine Funktionen, sondern nur Methoden gibt.
Schau' dir das mal in einem Tutorial/Spezifikation nochmal genauer an, denn in JS gibt es eigentlich keine Methoden, sondern nur Funktionen... aber diese können im Kontext eines Objektes ausgeführt werden. Schau' dir das einfach nochmal an.

PS: Und dann gibt es noch Prototypes und keine Klassen aber Konstruktoren... ;)
 
schon lange getan aber die spuckt mir nur "TypeError: document.Test.Eingabe.value.change is not a function" aus was ich mir ja shcon gedacht hab als es nicht funktioniert hat :)
ich bin gerade am lesen, aber ist ja bisi komplexer. daher 3 fragen
1. ist mein ansatz richtig.
2. gehört son skript zu den eher schweren umzusetzten. und
3. wenn es ansatzweise richtig ist, wie ist es richtig? :)
PS.: wenn ich jetzt neu als neu = new string (""); geklariere fintioniert es auch nicht obwohl ich es ja zu einem objekt mache? und in meinem ursprung script
HTML:
 <script>
  		
var str="Hello world!";
function change(){  
 var r = str.match("l");
 if (r){
 	var w = str.replace(/\l/g,"LOL");
 }}
 	document.write(w + "<br>");
 </script>
funktioniert es auch! er liest aus dem hello world alle ls raus

PPS.: ich hatten och die idde:
HTML:
function change(){ var neu = new string (); 
 var r = w.match("l");
 if (r){
 	w = document.Test.Eingabe.value.replace(/\l/g,"LOL");
 }}
funkt aber auch nicht
 
Zuletzt bearbeitet von einem Moderator:
Gelöst :D
HTML:
<script>
function MachKlein () {
  var str = document.Test.Eingabe.value;
  var r = str.match("l");
 if (r){
str= document.Test.Eingabe.value.replace(/\l/g,"LOL");
document.Test.Eingabe.value = str
 }}
</script>
Danke für den gedanken anstoss :)
 
Zuletzt bearbeitet von einem Moderator:
Bitte - gern geschehen.

Drei kleine Tipps noch:
1. In JS gilt es die Konvention, dass Funktionsnamen immer mit einem kleinen Buchstaben beginnen. Nur Konstruktoren haben einen Großbuchstaben am Anfang. Wenn du dich daran hältst, ist es einfacher für fremde Leute, deinen Code zu lesen und du kannst deren Code besser lesen, da du die Konvention schon verinnerlicht hast.
2. Der JS-Interpreter ignoriert zwar Codelayout, aber wenn du eine gescheite Indentation verwendest, ist dein Code viel lesbarer und leichter zu warten.
3. Du kannst deinen Code etwas schlanker gestalten:
Code:
function machKlein(){
	var str = document.Test.Eingabe.value;
	if (str.match("l")){
		document.Test.Eingabe.value = str.replace(/l/g,"LOL");
	}
}
 
vielen dank das habiert das script :)
ich hab noch ne kleine frage ich will ein spaß text converter bauen.
ich hab das script für jeden abc...z buchstaben copy/pasted und den gesuchten buchstaben und das zu ersetztende wort angeglichen.
die machKlein z.B. aSearch und eine aAsearch für großbuchstaben genannt und dann in einer neuen funktion click() eingefügt.
nun ändert das script zwar die wörter aber meist nur mit einem random wort aus den funktionen.
meine frage muss ich in jeder funktion die variablen ändern oder geht dass einfacher bzw schlanker?

Ps.: ich weiss hatte nur ein teil das scriptes aus einen bsp. ausm netz übernommen und in dem war die funktion so benannt. die "regel"
gibt es ja in fast jeder prog. sprache :)

PPs.: mir ist noch übernacht gekommen vlt mit ner swtich abfrage?
Code:
function textSearch () {
	var str = document.Test.Eingabe.value.match("");
	switch (str){
		case "l":
		document.Test.Eingabe.value = str.replace(/l/g,"LOL");
		break;
		default:
        document.Test.Eingabe.value = ("bitte text einfügen");
}}
funktioniert aber leider auch nicht :)
 
Zuletzt bearbeitet:
Mir ist deine Frage nicht ganz klar... du willst jeden Buchstaben durch ein bestimmtes Wort ersetzen?

Zeig' doch mal deine kompletten Versuche,

PS: Funktionen in großem Maßstab zu kopieren und dann nur eine Kleinigkeit darin zu variieren ist sehr selten eine gute Idee. Meistens fehlt der Funktion ein, zwei Parameter oder man sollte einen komplett anderen Weg gehen.
 
haha das sit viel ich kopier mal nur den anfang und das ende sosnt wieder holt sich dass immer wieder.
Code:
function aSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("a");
 if (r){
str= document.Test.Eingabe.value.replace(/\a/g,"ALTEr");
document.Test.Eingabe.value = str
 }}
 function aASearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("A");
 if (r){
str= document.Test.Eingabe.value.replace(/\A/g,"ALTe");
document.Test.Eingabe.value = str
 }}
 
function bSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("b");
 if (r){
str= document.Test.Eingabe.value.replace(/\b/g,"BAMm");
document.Test.Eingabe.value = str
 }}
  function bBSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("B");
 if (r){
str= document.Test.Eingabe.value.replace(/\B/g,"Bam");
document.Test.Eingabe.value = str
 }}
 
  function cSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("c");
 if (r){
str= document.Test.Eingabe.value.replace(/\c/g,"CHILl");
document.Test.Eingabe.value = str
 }}
  function cCSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("C");
 if (r){
str= document.Test.Eingabe.value.replace(/\C/g,"CHill");
document.Test.Eingabe.value = str
 }}
 
  function dSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("d");
 if (r){
str= document.Test.Eingabe.value.replace(/\d/g,"DAMm");
document.Test.Eingabe.value = str
 }}
  function dDSearch () {
  var str = document.Test.Eingabe.value;
  var r = str.match("D");
 if (r){
str= document.Test.Eingabe.value.replace(/\D/g,"Damm");
document.Test.Eingabe.value = str
 }}
//wiederholt sich bis z


 function convert(){
	 aSearch ();
	 aASearch ();
	  bSearch ();
	 bBSearch ();
	  cSearch ();
	 cCSearch ();
	  dSearch ();
	 dDSearch ();
         ...
//wiederholt sich auch bis z
}
Entschuldigt die wöter das waren nur test wörter dass ichs beim testen unterscheiden kann. hier html:
HTML:
<form name="Test" action="">
<textarea class="letter" id="letter"  name="Eingabe" cols="50" rows="10"></textarea>
<input type="button" value="convert" onclick="convert()">
</form>

Nun soll wenn ich ein text schreibe wie z.b. "Hallo welt" keine ahung z.b. "HEINZ ALF LAURA LOLA OTTO WILL Ella Lukas Teodor" rauskommen (nur ein beispiel dass ihr wisst was ich mein)

Mein problem ist dass er mir immer wenn ich z.b. ein a schreibe "ALTEleleLEleleLeLTEleler" ausgibt und nicht ALTEr ect. auch wenn ich mehrere buchstaben schreibe gibt er mir immer nur einen aus und ersetzt alles mit diesem.
 
Zuletzt bearbeitet:
sry für den doppelt post mein internet spinnt bischen.
hier noch meine anderne versuche die aber nicht gehen.
Code:
function textSearch () {
	var str = document.Test.Eingabe.value;
	switch (str.match){
		case "a":
		document.Test.Eingabe.value = str.replace(/a/g,"AZ");
		break;
		case "b":
		document.Test.Eingabe.value = str.replace(/b/g,"BOB");
		break;
		default:
                document.Test.Eingabe.value = ("bitte text einfügen");
}}
Code:
function textSearch(){
	var str = document.Test.Eingabe.value;
		document.Test.Eingabe.value = str.replace(/a/g,"ALT");
		document.Test.Eingabe.value = str.replace(/A/g,"ABER");
	}
Code:
function machKlein(){
	var str = document.Test.Eingabe.value;
	if (str.match("a")){
		document.Test.Eingabe.value = str.replace(/a/g,"ALT");
	}
        if (str.match("A")){
		document.Test.Eingabe.value = str.replace(/A/g,"ABER");
	}
}
 
Funktionen in großem Maßstab zu kopieren und dann nur eine Kleinigkeit darin zu variieren ist sehr selten eine gute Idee. Meistens fehlt der Funktion ein, zwei Parameter...

Stimmt.
@Jupiter1: dein Skript ist unnötig kompliziert.
Warum machst du für jeden Buchstaben eine eigene Funktion und nicht einfach eine einzige Funktion, in der du alle replace-Regeln auf einmal notierst?
 
@julian mein nick ist koschernostra ;),
aber hab ich ja gemacht das war das letzte der 3 scripte de ich gepostet hab funktioniert aber nicht.
hier macht er nur für A das replace aber nicht für a, und wenn ich mehrere tranhänge replaced er auch nur das A
function machKlein(){
var str = document.Test.Eingabe.value;
if (str.match("a")){
document.Test.Eingabe.value = str.replace(/a/g,"ALT");
}
if (str.match("A")){
document.Test.Eingabe.value = str.replace(/A/g,"ABER");
}
}
 
Zuletzt bearbeitet:

:) - es sind einfach zu viele Leute hier ;)

@koschernostra: das ist auch logisch, dass das nur für das A ersetzt. Die erste Ersetzung mit dem a wird ja ducrh die zweite überschrieben. Wenn dann müsstest du dir hintereinanderpacken (also den Rükgabewert von .replace wieder in str speichern), ABER dann hast du das Problem, dass das "A" in "ALT" auch ersetzt wird und "ABERLT" raus kommt, wenn man "a" eingibt.

Damit das sauber funktioniert, muss du ein einziges .replace() machen, in dem dann alles per Callback behandelt wird.

In etwa so:
Code:
function charReplace(){
	var map = {
		a: "ALT",
		A: "ABER"
		/* hier alle Buchstaben und Ersetzungen als Key/Value rein*/
	};
	document.Test.Eingabe.value = document.Test.Eingabe.value.replace(/./g, function(m){
		if (map[m]){
			return map[m];
		}
		else {
			return m;
		}
	});
}
- ungetestet.
 
Zuletzt bearbeitet:
vielen dank für die hilfe, habs noch nicht testen können wenn schreib ich ein ps.
würde dich als dank im script verewigen wenn es ok ist oder du lust hast :)

PS: das script geht leider auch nicht. es ersetzt nur A nicht a, geschweige denn die anderen buchstaben :(
 
Zuletzt bearbeitet:
ich hab dass schon als ps geschrieben, aber leider hab ich weider das problem dass es nur einmal einen buchstaben ersetzt.
ich hab bisl rumgespielt hat aber leider nix gebracht. das scipt selber versteh ich schon aber leider nicht soweit dass ich auf eine lösung komme :(
 
Dass ist mir ja fast unangenehm hier nochmal mit einem doppeltpost nachzufragen :)
aber nach ein bischen try and error und googlen ist mir aufgefallen in einem map array kann man keine anderen arrays deklarieren oder?
weil die idee war das nicht zu jeden buchstabe immer das gleiche wort kommt.
:)
 
Zurück
Oben