if (function()) immer true?!
sandra
- javascript
Hi,
ich habe eine function, die die Inhalte von Inputs prüft. Die funktioniert auch einwandfrei und markiert nicht ausgefüllte und gibt dann entsprechend false zurück (außer, wenn alle ausgefüllt sind).
jetzt habe ich eine andere funktion (A), die diese check_form aufruft
if (check_form(string)) { }
Die Funktion check_form wird richtig aufgerufen, markiert das erste leere Feld, returnt dann aber direkt true, wodurch auch Funktion A true returnt. In Funktion A gibt es allerdings gar kein return true, sondern IMMER am Ende ein return false.
Obwohl der Aufruf check_form() in einer if() steht, scheint js den Wert true aus Funktion A heraus zu returnen.
Kann mir jemand sagen, woran das liegt, bzw. wie ich die check_form korrekt durchlaufen kann und dann das return prüfe, ohne das return durch Funktion A weiterzugeben?
Also beim direkten Aufruf von check_form (statt über A), funktioniert alles wie gewünscht..
LG
Hi,
Hallo,
Die Funktion check_form wird richtig aufgerufen, markiert das erste leere Feld, returnt dann aber direkt true, wodurch auch Funktion A true returnt. In Funktion A gibt es allerdings gar kein return true, sondern IMMER am Ende ein return false.
Schreib doch einfach mal deine Funktion in diesen Thread, damit könnte man dir sicher mehr helfen.
LG
mfg Pryos
Schreib doch einfach mal deine Funktion in diesen Thread, damit könnte man dir sicher mehr helfen.
Aufruf Beispiel:
check_form('input&,e-mail&;radio&,anrede&;input&,vorname&;input&,nachname&;');
function check_form(stringer) {
var elements = stringer.split("&;");
var element = "";
var elementid = "";
var return_ = true;
var checked_ = false;
alert(stringer);
$(".form_must input").css("background-color","");
for (var i=0;i<elements.length;i++) {
element = elements[i].split("&,");
if ((element[1]) && (element[0] != "check") && (element[0] != "radio")) {
elementid = "fe_" + element[1].toLowerCase();
if (document.getElementById(elementid).value == "") {
$("#fe_"+element[1]).css("background-color","#f90");
return_ = false;
}
}
else if (element[0] == "check") {
elementid = "fe_" + element[1].toLowerCase();
if (!document.getElementById(elementid).checked) {
$("#fe_"+element[1]).parent().parent().css("background-color","#FFF4B5");
return_ = false;
}
else {
$("#fe_"+element[1]).parent().parent().css("background-color","");
}
}
else if (element[0] == "radio") {
checked_ = false;
elementid = element[1].toLowerCase();
elementname = document.autoform[elementid];
for (var j=0; j<elementname.length; j++)
if (elementname[j].checked) {
checked_ = true
}
if (!checked_) {
$("#"+elementname[0].id).parent().parent().css("background-color","#FFF4B5");
return_ = false;
}
else {
$("#"+elementname[0].id).parent().parent().css("background-color","");
}
}
}
if (return_ == false)
alert("Bitte alle Pflichtfelder ausfüllen");
return return_;
}
Schreib doch einfach mal deine Funktion in diesen Thread, damit könnte man dir sicher mehr helfen.
Aufruf Beispiel:
Anhand dessen läßt sich deine Beschreibung nicht nachvollziehen. Was ist jetzt da dein Problem?
Struppi.
function change_step(direction) {
if (check_form(bew_str[actual])==true) {
arbeite()
}
return false;
}
Die Funktion change_step soll check_form aufrufen, durchlaufen, und danach false übergeben.
Die Funktion wird aufgerufen (check_form), durchläuft aber nur bis zum ersten input, färbt es, und übergibt dann true, wodurch auch change_step true übergibt (was es NIEMALS soll).
Problem:
check_form wird frühzeitig abgebrochen (1) und change_step übergibt true (2).
Problem:
check_form wird frühzeitig abgebrochen (1) und change_step übergibt true (2).
Kann es evtl. sein, dass du die Fehlerkonsole nicht kennst?
Struppi.
Kann es evtl. sein, dass du die Fehlerkonsole nicht kennst?
ja
Kann es evtl. sein, dass du die Fehlerkonsole nicht kennst?
Hab mir die Fehlerkonsole mal durchgesucht. Da steht aber nichts dazu drin. Nur ein paar HTML/CSS-Fehler (Unerwartete Pseudoklasse first).
Hilft mir also auch nicht weiter..
Hilft mir also auch nicht weiter..
Dann stimmt mit der Logik deines Skriptes nicht. Du hast es doch geschrieben und solltest Wissen wo es haken könnte. Dann musst du dir anzeigen lassen welche Werte du prüfst und ob es die sind die du erwartest. Das geht sicher schneller, als wenn wir versuchen dein Slript zu verstehen.
Struppi.
Hallo,
Die Funktion wird aufgerufen (check_form), durchläuft aber nur bis zum ersten input, färbt es, und übergibt dann true
Das ist nicht möglich.
check_form übergibt *immer* false
zurück, nachdem etwas eingefärbt wurde...
$("#fe_"+element[1]).css("background-color","#f90");
return_ = false;
~~~...
~~~javascript
$("#fe_"+element[1]).parent().parent().css("background-color","#FFF4B5");
return_ = false;
~~~...
~~~javascript
$("#"+elementname[0].id).parent().parent().css("background-color","#FFF4B5");
return_ = false;
...
return return_;
...oder das Script bricht mit Fehler ab, dann gibt es gar keinen Rückgabewert, also auch dann nicht true
.
Problem:
check_form wird frühzeitig abgebrochen
Wo und warum bzw. unter welchen Umständen? Analysiere das mal. Du kannst z.B. an den verdächtigen Stellen die Inhalte deiner Variablen mit alert
`` ausgeben. Dann sollte sich ja zeigen, was wann nicht wie erwartet aussieht.
»» function change_step(direction) {
> if (check_form(bew_str[actual])==true) {
> arbeite()
> }
> return false;
> }
und change_step übergibt true
Das ist nicht möglich.
change_step gibt *immer* false
zurück, oder das Script bricht mit Fehler ab, dann gibt es gar keinen Rückgabewert, also auch dann nicht true
.
=> Das Problem liegt wahrscheinlich nicht da, wo du es vermutest, sondern ganz woanders...
Gruß, Don P
Ich kann derzeit kein Fehler erkennen.
Ich würde das Ding mit einigen Alerts mit Statusmeldungen spicken und schauen was herauskommt, ansonsten benötigen wir mehr Infos, vieleicht eine Beispielseite.
Es dürfte zwar nichts ändern, aber ich würde _return verwenden statt return_.