Jeg ønsker at køre wait() funktionen efter en bruger har klikket på linket. Det virker fint i link nr. 2. Men hvis der er en onclick="return Confirm('Sikker?')" i forvejen og jeg tilføjer den dynamisk med wait() funktionen, således at den kommer til at se ud: return Confirm('Sikker?');wait()
Men problemet er at når confirm returner noget, så køres wait ikke - hvorfor ??? Er der en workaround på det?
Jeg vil gerne have at wait() kører efter return Confirm('Sikker?'). Det ser ud til at return Confirm('Sikker?') går "den anden vej" og ikke kører wait()
wait() skal køre efter confirm() og ikke omvendt. Wait() laver en timeout, sådan, at når man submitter og hvis skærmbilledet ikke skifter efter 5 sekunder, så dukker der en "Please wait .." layer op.
Javascripten skal lægge en ekstra funktion i de eksisterende events, altså efter de funktioner i onclick-events. Og det skal ske helt automatisk, men det ser ud til at den return giver problemer...
olebole > der skal ikke laves en kodestump, fordi jeg vil kun tildele onclick event til alle links dynamisk via javascript. Wait() funktion skal altid være sidst....
Nej, jeg tænker logisk: wait() er en funktion, som giver en meddelelse om at man skal være tålmodig efter 5 sekunder - hvis siten er langsom. Hvis jeg nu klikker på et link og wait() kører først, så vil meddelelsen dukke op efter 5 sekunder og det samme med confirm box - wait() skal først køre EFTER confirm er dukket op. Og den skal bruges til en standard program, som kan ikke bare kan pille i, så jeg prøver at få javascript til at lave de nødvendige wait() events.
Hvorfor spørger du, når du ikke vil lære? Hvorfor skal du diskutere med folk, der ved langt mere end dig selv - i stedet for at teste, hvad de skriver til dig? Du har fat i de to bedste JavaScriptere på Eksperten, som begge fortæller dig, du tager fejl - og fortæller dig, hvad du skal gøre.
Du er tydeligvis ikke i stand til at overskue selv det mest basale JavaScript, så måske du skulle indtage en lidt mere realistisk holdning til dine egne evner og teste de løsninger, vi skriver til dig.
Jamen, jeg tænker bare på den teoriske plan. En onclick event som hedder wait();return confirm('Sikker?') betyder vel at wait() kører først. Min kode ligger andetsteds, så jeg kan først prøve efter på tirsdag. Og jeg er IKKE grøn til javascript. Men prøver at finde ud af, hvordan rækkefølgen skal opstilles. Håber det er OK at I to kan vente ....
Måske er du ikke grøn til JavaScript ... men i så fald vil jeg betragte dig som værende farveblind :)
Ja, wait() vil præcis afvikle først. Du fortæller, det er en setTimeout, du sætter igang - og som tæller i baggrunden, mens de andre ting afvikles. Det gør en setTimeout altid i JavaScript - så det er lidt svært at få øje på, du skulle bygge din 'logik' på noget, der ligner JS-viden.
I øvrigt er det jo let nok at lave en lille test - uanset hvor dine filer ligger. Kan du skrive her, har du en browser og en NotePad, så deeeet .....
<script type="text/JavaScript"> function wait() { setTimeout("alert('Timeout')", 5000); } window.onload = function() { var aA = document.getElementsByTagName("a"); for (i=0; i<aA.length; i++) { aA[i].onclick = function() { if (confirm('Sikker?')) { wait(); return true; } else { return false; } } } } </script>
<a href="java script:alert('Linket går her')">TEST</a>
Ja, din kodestump er god nok. Men jeg står overfor en udfordring, som gør, at jeg skal sætte en wait() i alle onclick events som har tag A og INPUT - det kunne gøres, at hvis aA indeholder "return" (kan gøres ved RegExp.match funktionen?) og hvis den indeholder return, så skal din kodestump bruges - ellers laves den i normal rækkefølge. Har jeg fat i noget? :-)
Tak for indlæggene. Oleboles kode har givet mig inspiration til at gå videre. Det hele handler om at onclick event skal altid kalde wait() og problemet med return er løst. Jeg har desuden også lavet nogle undtagelser, så ventebeskeden ikke dukker op, når man klikker på et input text felt eller checkbox m.m. Koden kan ses nedenfor:
var attribute = ""; var typeExceptions = new Array('text','password','radio','checkbox'); var exceptionFlag = false; var tagArray = document.getElementsByTagName(type); for(m=0;m < tagArray.length;m++) {
// Exceptions for input fields - defined in typeExceptions if (type == 'input') { attribute = tagArray[m].type.toString(); if (tagArray[m].type != null) { for (i=0;i<typeExceptions.length;i++) { if (Trim(attribute) == typeExceptions[i]) { exceptionFlag = true; } } } }
if (exceptionFlag == false) { var event = tagArray[m].onclick;
if (event == null) { tagArray[m].onclick = function() { wait(); } } else { if (tagArray[m].onclick.toString().indexOf("return") > -1) {
Hehe ... det er okay - og det funker. Der er dog et par ting, jeg ville gøre lidt mere 'sexy', hvis det var mig, der skulle kode det :)
Bl.a. ville jeg bruge et hash-table (et objekt, hvor alle properties værdier er sat til '1') i stedet for at bruge et array til dine exceptions ... det er langt hurtigere at søge i. Dernæst ville jeg blot break'e loop'et, hvis/når en exception findes. Det er jo rigeligt til, at der ikke sættes handler på det pågældende element.
Så ender din 'setHandlers' op med at se sådan ud:
function setHandlers(type) { var attribute = ""; var typeExceptions = {text:1, password:1, radio:1, checkbox:1 ); var exceptionFlag = false; var tagArray = document.getElementsByTagName(type); for(m=0;m < tagArray.length;m++) { // Exceptions for input fields - defined in typeExceptions if (type == 'input') { attribute = tagArray[m].type.toString(); if (tagArray[m].type && typeExceptions[Trim(attribute)]) break; } var event = tagArray[m].onclick; if (event == null) { tagArray[m].onclick = function() { wait() }; } else { if (tagArray[m].onclick.toString().indexOf("return") > -1) { var funcstring = "function Evaluate_" + type + "() { " + getFuncBody(event) + " }"; funcstring += "evalValue = Evaluate_" + type + "();"; funcstring += "if (evalValue == true) {\n"; funcstring += " wait();\n"; funcstring += " return true;\n"; funcstring += "} else {\n"; funcstring += " return false;\n"; funcstring += "}\n"; tagArray[m].onclick = new Function(funcstring); } else { tagArray[m].onclick = new Function(getFuncBody(event) + ";wait()"); } } } }
PS: nu ved jeg ikke, hvordan du har det med knapper. Jeg selv bruger altid <button></button> - og tildeler knappen den ønskede type. Andre bruger f.eks: <input type="submit" value="Jeg er en knap">
Hører du til den sidste kategori, kan det være, du skal udvide dit hash-table til: var typeExceptions = {text:1, password:1, radio:1, checkbox:1, submit:1, reset:1, button:1);
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.