• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

problem mit inner html

sin777

Neues Mitglied
hallo, ich habe einen button vom type onsubmit. das formular hat einen eventhandler onsubmit der folgende funktion aufruft und deren ergebnis zurück gibt:

PHP:
    function check() {
        var user = document.my_form.name.value;
        var pass = document.my_form.password.value;

        reg1 = /^\w{3,15}$/;
        reg2 = /^\w{5,15}$/;

        if(user.match(reg1) && pass.match(reg2)) {
            return true;
        }
        document.getElementById("ansage").innerHTML = "Jeder Benutzername "
            + "hat eine Mindestlänge von drei Zeichen und jedes Passwort "
            + "hat eine Mindestlänge von fünf Zeichen.";
        return false;
    }

mein problem ist nun, dass wen ich die inner html ändere, dass die anderen elemente die davor angezeigt wurden einfach verschwinden ... woran liegt das und wie kann ich das vermeiden?
 
Hast mal versucht, was passiert, wenn du nichts nach 'ansage' schreibst, oder einen alert verwendest? Workarround wäre, vor dem inner.HTML alle Formularfelder zu sichern und danach wieder zu setzen. Name und Password hast eh schon :-). Könntest auch versuchen, ein anderes Feld zu nehmen (wie Label) und nicht innerHTML zu setzen, sondern ein value-Attribut.
 
PHP:
    var loginInfo = document.createElement('p');
    loginInfo.innerText =
        "Jeder Benutzername "+
        "hat eine Mindestlänge von drei Zeichen und jedes Passwort "#
        "hat eine Mindestlänge von fünf Zeichen.";
    loginInfo.style.display = 'none';

    document.getElementById("ansage").appendChild(loginInfo);

    function check() {
        var user = document.my_form.name.value,
            pass = document.my_form.password.value;

        if(user.match(/^\w{3,15}$/) && pass.match(/^\w{5,15}$/)) {
            return true;
        } else {
            loginInfo.style.display = 'block';
            return false;
        }
    }
 
Hast mal versucht, was passiert, wenn du nichts nach 'ansage' schreibst, oder einen alert verwendest? Workarround wäre, vor dem inner.HTML alle Formularfelder zu sichern und danach wieder zu setzen. Name und Password hast eh schon :-). Könntest auch versuchen, ein anderes Feld zu nehmen (wie Label) und nicht innerHTML zu setzen, sondern ein value-Attribut.

label hat kein value-Attribut. wie meinst du das genau?

Weiterhin: WARUM verschwindet denn da alles und warum bei innerText bei <p> nicht?

was ist der der unterschied zwischen innertext und innerhtml?

ich habe jetzt eine andere funktion die eigentlich das gleiche macht und plötzlich verschwindet der rest nicht mehr ...

PHP:
<script type="text/javascript">
    function check() {
        document.getElementById("test").innerHTML = "LOLOLOL";
        return false;
    }
</script>

Danke :)
 
Zuletzt bearbeitet:
Label hatte ich nicht nachgesehen, dann müsstest einen button nehmen und den so wie ein Label formatieren. Unterschied sehe ich auch keinen wirklichen, wenn deine Funktion wirklich so ist wie im ersten Beispiel. Eigentlich sollte der Refresh nur passieren, wenn der Submit der Form erfolgte, also wenn du mit onclick="return(check());" die Funktion check mit true verlässt. Kannst ja mal probieren

onclick="check(); return false;"
 
Zuletzt bearbeitet:
es ist kaum ein unterschied zwischen innerHTML und innerText außer das innerHTML.

Aber es ist doch ganz einfach zu verstehen. Du sagst das innerHTML also der gesammte content des elements ein text ist also ist natürlich alles andere weg. es ist auch komisch einfach einen text irgendwo einzufügen. bastes lieber so wie ich es geschrieben habe das du ein text element hast das du, wennd er check fehlschläft, sichtbar machst.

und frage bitte nicht einfach weiter nach lösungen deiner probleme sondern versuche einmal den code zu verstehen damit du spezifischere fragen stellen kannst.
 
Zurück
Oben