Oprettet ons. d. 10. marts 2010 kl. 14:04:02

stranix321
stranix321 (3.800 point. Point ude: 0)

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

Skrevet tor. d. 11. marts 2010 kl. 09:50:47| #1

stranix321
stranix321 (3.800 point)
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();
        }
    }
}

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Tabindex!

Oprettet den 11. februar 2012 kl. 11.37
thomasfricke giver 30 point for svar | Giv et svar »

skal frem brugernavn ned og sige om den har eller ej

Oprettet den 11. februar 2012 kl. 02.44
tobrukDk giver 20 point for svar | Giv et svar »

Muligvis script-konfllikt i jquery. Min slider vises...

Oprettet den 9. februar 2012 kl. 23.00
Peterjakobsen giver 30 point for svar | Giv et svar »

Seneste guides

Installer win 7
Den gode bruger


   




Tips & Tricks fra PC World

Teaser billede

Her er fem sjove danske websider du skal kende

Trænger dine lattermuskler til en omgang fitness på dansk? Vi viser vej til fem websider fyldt med humor og vanvittig satire.


Anmeldelser fra PC World

Teaser billede

Test: Denne super-tablet er iPads hårdeste konkurrent

Eee Pad Transformer Prime er frygtindgydende med sin quadcore processor og evne til at trylle sig om til bærbar. Apple bør kigge i bagspejlet, for Asus' tablet-pc kommer buldrende - og gør det...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du snart hente Windows 8

Den nye offentlige betaversion af Windows 8 er klar i denne måned.


Nyheder fra Computerworld

Teaser billede

Måske snart slut med Androids helt store problem

Android-platformen har længe været plaget af et særligt problem. Men måske er problemet nu ved at være elimineret.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger