Avatar billede gertnissen Nybegynder
24. maj 2000 - 05:41 Der er 11 kommentarer og
2 løsninger

Event handling - navn på onChange form element

Jeg har følgende kode, som virker. Med min alert(e.type) får jeg hvilket event der skete (I dette tilfælde altid -change).
Hvordan får jeg navnet på det form element der triggede eventet onChange ? Det skal ikke være parameter overført !

Findes der en lignende metode ala. e.type ?

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<HTML>
<HEAD>
<SCRIPT>
  function move(e) {
    alert(e.type)
    document.form.input.value=document.form.select.options[document.form.select.selectedIndex].value;
  }
</SCRIPT>

</HEAD>
<BODY>

<FORM name="form">
<INPUT name="input" type="text" size=10><BR>
<SELECT name="select" size=2>
  <OPTION value="123">123 - a
  <OPTION value="456">456 - b
</SELECT>
</FORM>

<SCRIPT>
  document.form.select.onChange=move;
</SCRIPT>
</BODY>
</HTML>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Andre kommentarer til fremgangsmåden er også velkomne, kan det eks. gøres anderledes eller bedre.
Avatar billede jumper Nybegynder
24. maj 2000 - 05:55 #1
e.target

/Thor
Avatar billede jumper Nybegynder
24. maj 2000 - 05:55 #2
Det var i NS, i IE er det

event.srcElement

/Thor
Avatar billede gertnissen Nybegynder
25. maj 2000 - 09:35 #3
e.target returnerer

"<SELECT name="select" size=2><OPTION value="123">123 - a<OPTION value="456">456 - b</SELECT>"

Er der en nem måde at parse sig frem til navnet på select elementet ?

Mit script virker forøvrigt ikke i IE - hvorfor ? (flere spørgsmål = flere point)
Avatar billede michaelras Nybegynder
25. maj 2000 - 15:40 #4
Prøv det her (virker både i IE og NN)

<HTML>
<HEAD>
<SCRIPT>
  function move(e) {
    if (e.srcElement) alert(e.srcElement.name)
    else alert(e.target.name)
    document.form.input.value=document.form.select.options[document.form.select.selectedIndex].value;
  }
</SCRIPT>

</HEAD>
<BODY>

<FORM name="minform">
<INPUT name="input" type="text" size=10><BR>
<SELECT name="dfwfselect" size=2 onChange="move(event)">
  <OPTION value="123">123 - a</option>
  <OPTION value="456">456 - b</option>
</SELECT>
</FORM>

</BODY>
</HTML>

Altså e.srcElement.name for IE
og e.target.name for Netscape

Michael
Avatar billede michaelras Nybegynder
25. maj 2000 - 15:48 #5
I stedet for:
document.form.input.value=document.form.select.options[document.form.select.selectedIndex].value;
(som egentlig burde være document.minform.input.value=document.minform.dfwfselect.options[document.minform.dfwfselect.selectedIndex].value; i ovenstående eksempel)

erstat det med
document.minform.input.value=document.minform.dfwfselect.value;

(minform og dfwfselect er omdøbt til det for at vise at det er dem det drejer sig om og ikke tag-typen)

Michael
Avatar billede michaelras Nybegynder
25. maj 2000 - 15:52 #6
UPS: nå nej, ovenstående (document.minform.input.value=document.minform.dfwfselect.value;) virker jo ikke i Netscape....

Michael
Avatar billede gertnissen Nybegynder
26. maj 2000 - 13:34 #7
michaelras >> e.target.name var præcis det jeg ledte efter.

Jeg vil helst undgå at bruge onChange direkte i select taggen, og i stedet bruge event handling på dokumentet
<SCRIPT>
              document.form.select.onChange=move;
</SCRIPT>
Har du flyttet det til taggen, fordi ovenstående ikke kan laves i IE ?
Avatar billede gertnissen Nybegynder
26. maj 2000 - 13:36 #8
PS. Der er stadig 60 point (mere) at kæmpe for
Avatar billede gertnissen Nybegynder
26. maj 2000 - 13:41 #9
hmm. Man kan tilsyneladende ikke lave delvis accept af spørgsmålet (uden at bruge alle tildelte point), uden at det flyttes til kategorien besvaret !

Men der er altså stadig 60 point tilbage i spørgsmålet !
Avatar billede michaelras Nybegynder
26. maj 2000 - 16:07 #10
Grunden til at jeg flyttede onchange til selve tagget var at i Netscape hedder det object.onChange, men i IE hedder det object.onchange, altså store/små bogstaver hvilket IKKE er det samme - latterligt, hvorfor kan de dog ikke bare blive enige!!
Også på den måde skal du i function move()
erstatte e.???? med event.???? (og fjerne e i move(e))

DVS:
document.form.select.onChange=move; // Netscape specifik
document.form.select.onchange=move; // IE specifik

og
  function move() {
    if (event.srcElement) alert(event.srcElement.name)
    else alert(event.target.name)
    document.form.input.value=document.form.select.options[document.form.select.selectedIndex].value;
  }

Michael
Avatar billede michaelras Nybegynder
26. maj 2000 - 16:12 #11
Det med:
erstatte e.???? med event.???? (og fjerne e i move(e))

er i hvert fald nødvendig i IE, ved ikke om Netscape automatisk videresender event-objektet til funktionen så e i move(e) referere til event, i så fald kan man jo bare i første linie af move checke om det er IE og så sige e = event

Michael
Avatar billede gertnissen Nybegynder
29. maj 2000 - 13:30 #12
smukt, det virker.

Her er mit endelige resultat (testet i NS 4.6 og IE 5.0)

            <HTML>
              <HEAD>
              <SCRIPT>
                function move(e) {
                  if (document.all) {
                    alert(event.type)
                    alert(event.srcElement.name)
                  }
                  else {
                    alert(e.type)
                    alert(e.target.name)
                  }
                  document.form.input.value=document.form.selhis.options[document.form.selhis.selectedIndex].value;
                }
              </SCRIPT>

              </HEAD>
              <BODY>

              <FORM name="form">
              <INPUT name="input" type="text" size=10><BR>
              <SELECT name="selhis" size=2>
                <OPTION value="123">123 - a
                <OPTION value="456">456 - b
              </SELECT>
              </FORM>

              <SCRIPT>
                document.form.selhis.onchange=move;
              </SCRIPT>
              </BODY>
            </HTML>
Avatar billede michaelras Nybegynder
29. maj 2000 - 13:55 #13
Hmm, lyder underligt at Netscape godtager det med lutter små bogstaver... Men det er da rart det virker

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