Avatar billede stranix321 Nybegynder
10. marts 2010 - 14:04 Der er 1 løsning

Safari dobbelt submit problemer

Jeg sidder med et stort Safari problem. Jeg har et lokalt testsite der indeholder eksempelvis:

<form name="casStubTestForm" method="post" action="">
    <input name="e-mail" type="text" class="formfields" id="e-mail" value="" />
    <input name="submit_button" type="submit" class="button" value="Sign up!" />
</form>
.

Når sitet loades, bliver der loaded et script (lavet i JQuery) hvor jeg "hugger" formens oprindelige submitfunktion:

jQuery('form[name=' + autoCoRegEngine.settings.FormName + ']').submit(autoCoRegEngine.submitActionFunction);

Dette gør jeg fordi, når en bruger klikker på submit knappen så skal jeg have indsamlet informationen først og sendt den videre inden den oprindelige form submitter. Det forsøger jeg at løse ved at bygge en form, submitte den, og til sidst submitte den oprindelige form. Koden ser således ud:


jQuery('form[name=' + this.settings.FormName + ']').unbind('submit', autoCoRegEngine.submitActionFunction);
jQuery('<form width="0" height="0" id="autoCoRegEngineSubmitter" action="' + this.settings.SubmitUrl + '" method="POST"><input type="hidden" name="' + this.names.submitVar + '" id="' + this.names.submitVar + '" /></form>').appendTo(jQuery('body'));
jQuery('input#' + this.names.submitVar).val(this.formData);
jQuery('#autoCoRegEngineSubmitter').submit();
jQuery('form[' + this.settings.formName + ']').submit();


Det virker og er alt sammen meget godt i IE og FireFox, men det virker desværre ikke i Safari. Det er lige som om at Safari er fuldstændig ligeglad med jQuery('#autoCoRegEngineSubmitter').submit(); og kun udfører den oprindelige forms submit.
Jeg har prøvet med document.getElementById("autoCoRegEngineSubmitter").submit()

Kan det have noget at gøre med hvordan bubbling håndteres i Safari?
Please help. På forhånd tak.

Mvh. Hans Skytte
Avatar billede stranix321 Nybegynder
11. marts 2010 - 09:50 #1
Det lykkedes mig selv at finde en løsning. Den er ikke køn men det virker, så her kommer den.

Safari har tilsyneladende en anden måde at håndtere bubbling på end FF og IE. Hvor FF og IE afvikler den tilskrevede submitfunktion først dvs. autoCoRegEngine.submitActionFunction gør Safari det omvendt og starter med den oprindelige submitfunktion. Derfor skal skal vi have stoppet den først og efterfølgende have kørt vores eget hvorefter vi kan submitte den originale submit til sidst.

if (navigator.userAgent.indexOf("Safari") != -1)
{
    setTimeout('autoCoRegEngine.submitAction()', 500);
    return false;
}

Vi fortælle at vi ønsker at kører vores submitAction om et halvt sekund og returnerer false for at stoppe den oprindelige submit.
Når vi har kørt vores jQuery('#autoCoRegEngineSubmitter').submit(); skal vi sørge for at kører det oprindelige igen ved at bede om en ny funktionskørsel efter submit setTimeout('autoCoRegEngine.submitMainFormForSafari()', 655);. Bemærk ventetiden da vi ønsker at sikre os at dataene er kommet igennem inden vi submitter den originale. Vi returnerer true for at submitte vores egen form.

For at få kørt det originale submit skal vi simulere et klik. Det gøres således:

var forms = document.getElementsByTagName('form');

for (var i = 0; i < forms.length; i++)
{
    var input = forms[i].getElementsByTagName('input');
    for (var j = 0; j < input.length; j++)
    {
        if (input[j].type.toLowerCase() == 'submit')
        {
            input[j].click();
        }
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester