onklick will nicht (nachdem es schonmal funktionierte)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • onklick will nicht (nachdem es schonmal funktionierte)

    Hi,

    ich hab vor 2 Tagen eine Formular-Validierung per Ajax eingebaut. Nun stehe ich vor dem Problem, dass es nicht mehr funktioniert. Kann mir vielleicht jemand sagen warum das so ist?

    hier mein Code:

    script.js

    Quellcode

    1. function sendRequest(formdata, alertflag) {
    2. var req;
    3. try {
    4. req = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
    5. } catch (e) {
    6. alert('kein ajax');
    7. }
    8. req.onreadystatechange = function () {
    9. if ((req.readyState == 4) && (req.status == 200)) {
    10. var data = formdata.split("=")[0];
    11. if(req.responseText == 1){
    12. document.getElementsByName(data)[0].style.border="1px solid #08E731";
    13. if(alertflag == 1) return true;
    14. } else if(req.responseText == 0){
    15. if(alertflag == 0){
    16. document.getElementsByName(data)[0].style.border="1px solid red";
    17. } else {
    18. alert("Bitte geben Sie einen richtigen Wert im Feld \""+data+"\" an!");
    19. }
    20. }
    21. }
    22. }
    23. req.open('post', 'func.php');
    24. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    25. req.send(formdata);
    26. return false;
    27. }
    28. function checkEmpty(formdata){
    29. var daten = document.getElementsByName(formdata)[0].value;
    30. if(daten != ""){
    31. document.getElementsByName(formdata)[0].style.border="1px solid #08E731";
    32. } else {
    33. document.getElementsByName(formdata)[0].style.border="1px solid red";
    34. }
    35. }
    Alles anzeigen


    relevanter Teil im (Smarty-)Template:

    Quellcode

    1. <form method="post" action="" name="kontakt">
    2. <table width="100%" border="0">
    3. <tr>
    4. <td>Ihr Name</td>
    5. <td align="right"><input class="kontakt" type="text" name="name" onBlur="checkEmpty('name')" /></td>
    6. </tr>
    7. <tr>
    8. <td>Ihre eMail-Adresse</td>
    9. <td align="right"><input class="kontakt" type="text" name="mail" onBlur="return sendRequest('mail='+mail.value, 0);" /></td>
    10. </tr>
    11. <tr>
    12. <td>Betreff</td>
    13. <td align="right"><input class="kontakt" type="text" name="betreff" onBlur="checkEmpty('betreff')" /></td>
    14. </tr>
    15. <tr>
    16. <td colspan="2"><textarea class="kontakt" cols="30" rows="15" name="nachricht" onBlur="checkEmpty('nachricht')"></textarea></td>
    17. </tr>
    18. <tr>
    19. <td colspan="2">
    20. <input class="button" type="submit" name="kontakt_submit" value="Absenden" onklick="return sendRequest('mail='+mail.value, 1);" />
    21. <input class="button" type="reset" />
    22. </td>
    23. </tr>
    24. </table>
    25. </form>
    Alles anzeigen


    danke im voraus, vielleicht bin ich auch einfach wieder zu blind, allerdings habe ich nicht am JS geändert *grübel*...
  • Ja, das war der Fehler. Ich danke dir von Herzen!

    EDIT: jetzt ergibt sich allerdings ein anderes Problem. Ich möchte ja (unter anderem) beim Absenden prüfen, ob die eMail-Adresse eingetragen wurde und ob die in Ordnung ist. Dazu habe ich den onclick-Event gesetzt.
    Allerdings funktioniert das nur im Fehlerfall. Wenn die Mail-Adresse richtig ist, dann bekomme ich gar kein Ergebnis, es passiert einfach nichts.
    Ich dachte, ich hätte das in der Funktion mit dem return true gemacht, aber dem ist anscheinend nicht so.

    Hat jemand eine Idee, wie ich das lösen kann? (kurz: wenn email richtig, dann Formular losschicken)

    Bye...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mad ()

  • mad schrieb:

    Wenn die Mail-Adresse richtig ist, dann bekomme ich gar kein Ergebnis, es passiert einfach nichts.

    Ja, weil die aufgerufene sendRequest immer false returned. Das was du im AJAX Request auswertest, ist ja nochmal eine ganz seperate, anonyme (void) Methode. Dein return true brint dir dort also nichts.

    Statt dem return true musst du also wieder rausreferenzieren aufs Formular.
    Und zwar mit

    Quellcode

    1. document.forms.kontakt.submit()
  • Ok, das funktioniert so wieder. Allerdings bekomme ich jetzt ein Problem mit meiner Verarbeitung in PHP.
    Ich frage ab, ob die Variable vom Submit-Button gesetzt ist, dann checke ich Emailadresse usw. und versende die Nachricht.
    Wenn ich mit "document.forms.kontakt.submit()" arbeite, ist die Variable $_POST['kontakt_submit'] aber nicht gesetzt.

    Bekomme ich das irgendwie hin, dass diese Variable auch noch gesetzt wird? Oder gibt es es eine komfortable Möglichkeit die PHP-Datei umzubauen um schnell zum Ziel zu kommen? Ich könnte natürlich ein hidden-Feld einbauen, aber das möchte ich nicht, denn ich versuche immer mit dem zu arbeiten was notwendig ist, nicht (viel) mehr und nicht (viel) weniger...
    Sorry für die vielen Fragen, aber in JS bin ich nicht so bewandert...

    Hier mal die relevanten Teile meiner PHP-Datei:

    Quellcode

    1. if(isset($_POST['kontakt_submit'])){
    2. $smarty->assign("show", "msg");
    3. if(check_filled($_POST)){
    4. if(!check_mail($_POST['mail'])){
    5. $msg = "Bitte geben Sie eine echte eMail-Adresse an!<br /><a href=\"?action=kontakt\">zurück</a>";
    6. $smarty->assign('msg', $msg);
    7. } else {
    8. include_once('classes/class.phpmailer.php');
    9. $mail = new PHPMailer();
    10. //hier wird die Nachricht gesendet...
    11. if(!$mail->Send()){
    12. $msg = "Warnung: Fehler beim Senden der Nachricht.";
    13. } else {
    14. $msg = "Nachricht wurde erfolgreich verschickt.";
    15. }
    16. $smarty->assign('msg', $msg);
    17. }
    18. } else {
    19. $smarty->assign("msg", "Bitte füllen Sie alle Felder aus!<br /><a href=\"?action=kontakt\">zurück</a>");
    20. }
    21. } else {
    22. $smarty->assign("show", "form");
    23. }
    Alles anzeigen


    Danke schon mal!