JavaScript Objekt als Parameter übergeben

darton

Lt. Junior Grade
Registriert
Okt. 2004
Beiträge
282
Hallo!
Eigentlich sollte es doch ohne Probleme funktionieren, wenn man in Javascript Funktionen Objekte als Parameter übergibt, oder? In meinem Beispiel funktioniert es zumindest nicht.
Hier mal der Code:
Code:
var nachname = $("#nachname");
var vorname = $("#vorname");

nachname.blur(validateName(nachname));
vorname.blur(validateName(vorname));

function validateName(element) {
		if (element.val().length < 1) {
			element.addClass("error");
			return false;
		} else {
			element.removeClass("error");
			return true;
		}
}
Wenn man also auf die Textfelder Nachname oder Vorname geht und nichts reinschreibt, sollen die input-Felder dazu die CSS-Klasse "error" bekommen, was bewirkt, dass die Textfelder einen roten Hintergrund bekommen. Auf der Konsole erscheinen für diesen Code keine Fehler, aber wenn ich die Seite lade, haben die Textfelder sofort einen roten Hintergrund, obwohl ich noch gar nicht in die Textfelder reingeklickt habe. Was ist falsch?
 
Jo cool. Das funktioniert. Ich verstehe allerdings deine Erklärung dazu nicht. Wenn ich den Code abändere zu:
Code:
var nachname = $("#nachname");

nachname.blur(validateName);

function validateName() {
		if (nachname.val().length < 1) {
			nachname.addClass("error");
			return false;
		} else {
			nachname.removeClass("error");
			return true;
		}
}
Dann funktioniert es ja. Hier würde ich also auch den Returnwert aufrufen.
 
wenn du "validateName(nachname)" angibst, bekommt die blur-Funktion nicht den Funktionsaufruf übergeben, den du haben willst, sondern den Rückgabewert des angegebenen Aufrufs, also true/false... und damit kann blur nix anfangen. Also die Funktion wird sofort aufgerufen und das Ergebnis geholt...

Du willst blur ja sagen "mach bitte ...". Und dazu musst du eine Funktion und nicht einen Wert übergeben. JavaScript weiß nicht, dass du einen Funktionsaufruf meinst, deshalb musst du den Umverpacken, z.B so wie es Blitzmerker gezeigt hat.

Im Grunde machst du beim Aufruf im ersten Code nichts anderes als
var result = validateName(nachname);
nachname.blur(result);
 
Zuletzt bearbeitet:
OK, verstehe.
Wäre es eigentlich auch möglich der blur-Funktion zwei Parameter zu übergeben? Also in etwa so:
Code:
nachname.blur(function(){
    validateName(nachname);
    validateNotEmpty(nachname);
});
 
Jo, es funktioniert, aber nur so:
Code:
nachname.blur(function(){
    validateName(nachname) && validateNotEmpty(nachname);
});
 
Es müsste auch anders funktionieren aber ohne den Code genau zu sehen kann man auch nicht wirklich viel dazu sagen...

kannst ja mal
nachname.blur(function(){
alert("Hallo");
alert("Welt");
});

machen und schauen, ob beide Sachen kommen...
 
Zurück
Oben