[JS/jQuery] Form submitten vanuit ajax event

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mac_Cain13
  • Registratie: Juni 2003
  • Laatst online: 17-09 15:48
Probleem is opgelost:
Ik had mijn submit knop het id en de name "submit" gegeven, waardoor ik blijkbaar de javascript functie submit van de browser overschreef. Nu met een nieuwe id en naam doet het script het top!
Orginele vraag:
Okay, het zit als volgt; Ik wil een formulier met ajax verzenden, dit gaat helemaal top met de jQuery.ajax functie. Nu wil ik alleen dat het formulier op de normale non-javascript manier wordt verzonden als er iets mis gaat tijden het ajaxen.

Hiervoor unbind ik het event wat de submit afhandelt zodra er een error is, alleen daarna kan ik met geen mogelijkheid het form meer submitten. Tenzij ik zelf nog een keer op de knop druk, wat ik dus wil automatiseren.

Een stukje code voor de duidelijkheid:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$(document).ready(init);

function init()
{
    $('form.cform').submit(handleSubmit);
}

function handleSubmit (eventObject)
{
    [...]

    // Mark this form as the active form // TODO: Ugly, can't we find the form in an other way in the callback?
    $(this).addClass('cformInProgress');

    // Send AJAX request
    $.ajax(cache: false, data: $(this).serialize(), dataType: 'json', error: handleAjaxError, success: handleAjaxSuccess, timeout: 4000, type: 'POST', url: submitUrl});

    return false;
}

function handleAjaxError (XMLHttpRequest, textStatus, errorThrown)
{
    // Remove listners and submit
    $('form.cformInProgress').unbind();
    $('form.cformInProgress').submit(); // <-- En deze doet dus domweg niets, ook geen fout in de console..

    // Inform user and ask to do an old skool submit :(
    alert('Formulier verzenden is mislukt met de melding:\n' + textStatus + ' / ' + errorThrown + '\n\nProbeer het formulier nogmaals te verzenden.');
}

handleAjaxSuccess : function (data, textStatus)
{...}


Het unbinden van de specifieke functie help ook niets, daarbij doet de submit() call ook domweg niets.

Overigens wil het submitten wel als ik geen unbind uitvoer van te voren, maar dan wordt handleSubmit nog eens aangeroepen. Opmerkelijk is hierbij dat, ook al geef ik true terug met handleSubmit bij de 2e call, het formulier niet wordt verzonden.

Hopelijk heeft iemand hier een goed idee/tip!

[ Voor 13% gewijzigd door Mac_Cain13 op 26-08-2009 22:32 . Reden: Oplossing gevonden! :) ]


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Daarom is het ook altijd verstandig de relevante HTML code erbij te plaatsen :). Ik ben ook weleens tegen dit probleem aangelopen, erg vervelend!

If I can't fix it, it ain't broken.


  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Mac_Cain13 schreef op woensdag 26 augustus 2009 @ 22:14:
Ik had mijn submit knop het id en de name "submit" gegeven, waardoor ik blijkbaar de javascript functie submit van de browser overschreef. Nu met een nieuwe id en naam doet het script het top!
Lang leve DOM Level 0 expando attributen, inderdaad.
Het wordt hoog tijd dat het compleet idiote DOM-0 model een nekschot krijgt.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:50

crisp

Devver

Pixelated

R4gnax schreef op donderdag 27 augustus 2009 @ 10:47:
[...]


Lang leve DOM Level 0 expando attributen, inderdaad.
Het wordt hoog tijd dat het compleet idiote DOM-0 model een nekschot krijgt.
Punt is dat dat niet kan omdat legio scripts 'in het wild' document.formname.elementname gebruiken...

Intentionally left blank