Avatar billede flushout Nybegynder
18. marts 2004 - 18:37 Der er 17 kommentarer og
1 løsning

Annulere body onload ver markering af tekstfelt i form

Jeg er ved at lave et banner, der skifter mellem to html dokumenter vha et javascript. Dette javascript bliver kørt vha body onload.

Jeg skal have annuleret den onload funktion, hvis der bliver indtastet noget i et tekstfelt der er på siden, hvordan gør jeg det?

Det er vigtigt at det virker både i IE, Mozilla og Netscape.

Her er koden:

<html>
<head>
<title>Topdanmark A/S</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">

<script type="text/javascript">
  function changePage() {
    window.location.href = "banner300.html";
  }

function validateInput(){
    var x = true;

    if (document.forms['banner'].tlf.value.length == 8) {
        var tlfnr = document.forms['banner'].tlf.value;
        x = checkfields(tlfnr);
        var z = 0;
        var y;
        var a = false;
        while (z<9){
            y = tlfnr.substr(z,1);
            if(isNaN(y)){
                x = false;
            }
        z++;
        }
    }else {
            x = false;
    }
   
return x;
}

function checkfields(tlfnum) {
     
  if(tlfnum<20000000)
  {
      return false;     
  }
 
  if((tlfnum>89999999) && (tlfnum<91000000))
    {
        return false;
    }
     
    return true;
}

</script>

</head>

<body style="background:#FFFFFF url(bil_300_250_1.gif) top left"  leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="setTimeout('changePage()',15000);">
    <form id="banner" method="post" onsubmit="return validateInput();" action="ringmigop.php" enctype="multipart/form-data" >     
        <div style="position:absolute; left:75px; top:175px;">
// ######### HER SKAL DER VÆRE ET ELLER ANDET DER ANNULERER MIN ONLOAD ###########
                <input type="textarea" id="tlf" name="tlf" value="Tast nummeret her">
            </div>
            <div style="position:absolute; left:85px; top:215px;">
                <input type="submit" value="Ring mig op nu">
            </div>
</body>
</html>


Jeg tror man kan gøre det med en onclick, men jeg er ikke sikker..

onclick="if(this.BLABLA)this.BLABLA='';"

På forhånd tak :)
Avatar billede flushout Nybegynder
18. marts 2004 - 21:23 #1
Kan dette bruges? Jeg har ikke selv mulighed for at teste det før i morgen og det er min deadline, så hvis der er nogen der ved det vil jeg være glad :)

<input type="textarea" id="tlf" name="tlf" value="Tast nummeret her" onFocus="if(this.focus)this.body.onload='';">
Avatar billede flushout Nybegynder
18. marts 2004 - 22:15 #2
Der må da være nogen der ved det...

Jeg smider glædeligt 100 point oveni... jeg skal bare have svar inden 2-3 timer, da jeg skal være færdig til i morgen!

PLEASE help!!
Avatar billede roenving Novice
19. marts 2004 - 00:38 #3
<body style="background:#fff url(bil_300_250_1.gif) top left;margin:0px" onload="var st=setTimeout('changePage()',15000);">

<input type="text" id="tlf" name="tlf" value="Tast nummeret her" onkeypress="clearTimeout(st);">


-- og der er ikke en input type, som hedder textarea ...
Avatar billede flushout Nybegynder
19. marts 2004 - 00:46 #4
ok jeg har rettet den til..

Jeg har fået adgang til et sted hvor jeg kan teste, men det virker ikke...?

Det den skal kunne er, at så snart markøren bliver sat i "text" skal timeout stoppes, dvs onload skal ikke køre changePage()..

Du kan se det på:
http://www.elverhojen.dk/topdk/JP/bil/ban336.html
Avatar billede roenving Novice
19. marts 2004 - 01:04 #5
Okay, jeg havde åbenbart ikke gennemskuet, at også onload er en funktion, så det derfor vil være en lokal variabel, når den sættes med var !-)

<script type="text/javascript">
var stop = false;
  function changePage() {
    if(!stop)window.location.href = "banner336.html";
  }

...


<input type="text" id="tlf" name="tlf" value="Tast nummeret her" style="width:120px;" onkeypress="stop=true;" onfocus="if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;">
Avatar billede flushout Nybegynder
19. marts 2004 - 01:11 #6
Tusind tak :)

Jeg ændrede onkeypress til onmousedown men har ellers brugt din løsning.

Smid et svar så får du point :)
Avatar billede roenving Novice
19. marts 2004 - 01:16 #7
-- og så var der da lige nogle mærkværdigheder:

<script type="text/javascript">
var stop = false;
function changePage() {
    if(!stop)window.location.href = "banner336.html";
  }
</script>

<body style="background:#FFFFFF url(bil_336_280_1.gif) top left; margin:0px" onload="if(!stop)setTimeout('changePage()',15000);">
  <form id="banner" method="post" onsubmit="return (this.tlf.value.match(/^([2-8]\d{7}|9[2-9]\d{6})$/))?true:false" action="java script:window.open('../../ringmigop.php','','width=350,height=200');window.location.href='banner336.html'" enctype="multipart/form-data" >     
    <div style="position:absolute; left:110px; top:170px;">
      <input type="text" id="tlf" name="tlf" value="Tast nummeret her" style="width:120px;" onkeypress="clearTimeout(st);">
    </div>
    <div style="position:absolute; left:120px; top:195px;">
      <input type="submit" value="Ring mig op nu" style="width:100px;" name="ring">
    </div></form>
</body>

-- her skulle alt være klaret, også alle valideringer !-)
Avatar billede roenving Novice
19. marts 2004 - 01:21 #8
Øv, men det er jo vel tilladt at koncentrere sig så meget om del-problemer, at man ikke får alt med, før man har tænkt sig om !-)

<script type="text/javascript">
var stop = false;
function changePage() {
    if(!stop)window.location.href = "banner336.html";
  }
</script>

<body style="background:#FFFFFF url(bil_336_280_1.gif) top left; margin:0px" onload="setTimeout('changePage()',15000);">
  <form id="banner" method="post" onsubmit="return (this.tlf.value.match(/^([2-8]\d{7}|9[2-9]\d{6})$/))?true:false" action="java script:window.open('../../ringmigop.php','','width=350,height=200');window.location.href='banner336.html'" enctype="multipart/form-data" >     
    <div style="position:absolute; left:110px; top:170px;">
      <input type="text" id="tlf" name="tlf" value="Tast nummeret her" style="width:120px;" onfocus="stop=true;if(this.value==this.defaultValue)this.value='';" onblur="if(this.value=='')this.value=this.defaultValue;">
    </div>
    <div style="position:absolute; left:120px; top:195px;">
      <input type="submit" value="Ring mig op nu" style="width:100px;" name="ring">
    </div></form>
</body>
Avatar billede flushout Nybegynder
19. marts 2004 - 01:25 #9
dvs det lille reg exp kan erstatte mit åndsvage script?? ..

hmm.. jeg tror jeg skal til at læse lidt op på det!
Avatar billede roenving Novice
19. marts 2004 - 01:25 #10
-- og så for lige at gøre den helt sofistikeret:

      <input type="text" id="tlf" name="tlf" value="Tast nummeret her" style="width:120px;" onfocus="stop=true;if(this.value==this.defaultValue)this.value='';" onblur="if(this.value==''){stop=false;this.value=this.defaultValue;};">

-- og der skal selvfølgelig også html-tags osv. på ovenstående !-)
Avatar billede flushout Nybegynder
19. marts 2004 - 01:27 #11
Dvs den sidste får onload om at fortsætte hvis focus bliver fjernet fra "text" ... ?
Avatar billede roenving Novice
19. marts 2004 - 01:28 #12
regExp'en siger:

Her skal være et 8-cifret tal, som enten

1) starter med tal mellem (og inklusive) 2 og 8

eller

2) starter med 9 og som andet ciffer har mellem (og inklusive) 2 og 9 !-)
Avatar billede roenving Novice
19. marts 2004 - 01:28 #13
Præcis, hvis det sker uden at der er skrevet noget !-)
Avatar billede roenving Novice
19. marts 2004 - 01:31 #14
-- og den sidste lille finesse, man kunne sætte på, var, i stedet for onsubmit, at disable submit-knappen indtil regExp'en matcher !-)
Avatar billede flushout Nybegynder
19. marts 2004 - 01:33 #15
ok! tusind tak for hjælpen :)

Hvor kan man læse om reg exp?? jeg har fundet noget på nettet, men der må være en documentation for det et eller andet sted, og det virker MEGET nyttigt!!
Avatar billede roenving Novice
19. marts 2004 - 01:42 #16
Tjah ...

Hvis du er til at læse de der ornsvage manualer, så kan du under regExp-objektet finde en masse nyttig information her:

http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/

-- og selvom det er livescripts (det, som idag hedder ECMA-script, i daglig tale javascript !-) opfindere, som har lavet denne manual skulle den være gældende også i IE (lige der har jeg i hvert fald endnu ikke fundet nogen fejl i M$s produkt !-)

-- og jeg har åbenbart ikke gemt referencen til min minimanual, men her kan du ved lidt tyggen på eksemplerne få en masse information om praktisk brug:

http://www.regexlib.com/DisplayPatterns.aspx?cattabindex=0&categoryId=1

-- og behold nu de fleste points selv, for det var jo ikke spørgsmål om spørgsmålets sværhedsgrad, men mere et spørgsmål om din deadline, som gjorde det vigtigt ...

-- i forhold til indsatsen er det ca. 30 points værd, men hvis vi medregner dit behov for oplysningerne og min evne til at levere dem, så kan vi _måske_ snige os op på omkring 60 points !-)

-- velbekomme '-)
Avatar billede flushout Nybegynder
19. marts 2004 - 01:47 #17
Ja, men for mig var det langt mere end 200 point værd, så jeg gav dig dem alle :)
Avatar billede roenving Novice
19. marts 2004 - 01:54 #18
Tjah ...

-- det irriterer mig at det er en indirekte underminering af E*s pointssystem, som jeg skrev kan noget af det retfærdiggøres af den tid, jeg har brugt, men det ender jo med, at der kræves 200 points for at svare på antallet af fingre på et normalt menneske ?-)

-- men der er jo ikke nogen grund til at mistænkeliggøre dine motiver, så jeg takker da for points ;~}
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