Avatar billede groyk Novice
02. januar 2009 - 12:49 Der er 15 kommentarer og
2 løsninger

onkeydown virker ikke i IE, Hvorfor?

Hej eksperter

Jeg har lavet mig et lille script der søger efter data i en MySQL DB

Kan ses her http://multipumpen.dk/shop/admin_ny/2.1.php
Prøv feltet "Ordrelinier" - "Vare nr."

I FF spiller det hele som det skal, men I IE virker de dynamisk oprettede events ikke.

Der er ialt 3 events der bliver oprettet dynamisk

De skrives således
newrow.setAttribute("onmouseover","classChange('var', 'TR', 'tr_hover',"+i+")");


Hvis jeg kigger i "generated source" er alt som det skal være i både IE og FF

Håber der er en der kan hjælpe.
Avatar billede welcor Nybegynder
02. januar 2009 - 14:19 #1
koden ser ud til at virke i IE7. Jeg får en popup, som beregnes dynamisk.
Avatar billede majbom Novice
02. januar 2009 - 16:47 #2
hvornår bliver de genereret?

den popup med varenumre kommer fint ved mig i ie7, men jeg fotstår ikke på dit spørgsmål, at det er det der er problemet, men jeg kan ikke se hvad det er så...
Avatar billede groyk Novice
02. januar 2009 - 16:47 #3
Hej welcor

Tak for info. Men det er ikke her problemet er.

Problemet kommer når der vælges fra listen med musen.

I selve listen bliver der genereret 3 events.

mouseover (markere den valgte linie)
mouseout (fjerner markering fra linien)
onmousedown (smidder valgte ID tilbage til søgefeltet.)

så søgningen i listen fungere som den skal, men de events der er placeret i listen virker ikke i IE7 !
Avatar billede majbom Novice
02. januar 2009 - 16:49 #4
der sker intet når jeg vælger en vare fra listen der kommer op, er det det der er problemet?

hvis jeg skriver "1" i varenummer, kommer der også varer der ikke starter med "1"..?
Avatar billede roenving Novice
02. januar 2009 - 16:52 #5
Den 'rigtige' måde at gøre sådan noget i dag ser ca. sådan ud:

...
parElm.appendChild(newrow);
if(newrow.addEventListener)
  newrow.addEventListener("mouseover",function(){classChange('var', 'TR', 'tr_hover',i)},true);
else if(newrow.attachEvent)
  newrow.attachEvent("onmouseover", function(){classChange('var', 'TR', 'tr_hover',i)});
else
  newrow.onmoseover = classChange('var', 'TR', 'tr_hover',i);
Avatar billede groyk Novice
02. januar 2009 - 17:22 #6
splazz

Så virker det som det skal, bortset fra onmouseover, onmouseout og onmousedown ikke virker.
Avatar billede groyk Novice
02. januar 2009 - 17:24 #7
roenving

idag laver jeg mine rækker således

var newrow=tBody.insertRow(-1); // Ny række

              newrow.setAttribute("onmousedown",CallbackVar.CallBack +"('"+CallbackVar.ReturnField+"','"+aRows[i][CallbackVar.ReturnId]+"')");
              newrow.setAttribute("onmouseover","classChange('"+CallbackVar.Div+"', 'TR', 'tr_hover',"+i+")");
            newrow.setAttribute("onmouseout","classChange('"+CallbackVar.Div+"', 'TR', 'tr',"+i+")");

Hvordan skal det omskrives, kan du give et eksempel?

Men burde det ikke virke når "generated source" er iorden?
Avatar billede majbom Novice
02. januar 2009 - 17:32 #8
ja det der med setAttribute virker ikke optimalt i hvert fald, jeg bruger også selv den funktion roenving skriver her, jeg tror faktisk at det er fra ham jeg fik den i sin tid.

function addEvent(elm, evt, func){
  if(elm.addEventListener)elm.addEventListener(evt, function(){eval(func)}, false);
  else if(elm.attachEvent)elm.attachEvent("on"+evt, function(){eval(func)});
  else elm["on"+evt] = eval(func);
}

bruges:

addEvent(newrow, "mousedown", "alert('hej: "+i+"');");
Avatar billede groyk Novice
02. januar 2009 - 17:46 #9
Har lige rodet med det, havde lavet ca. samme funktion, men så virker det slet ikke, hverken i IE eller FF.

Her er den linje jeg kalder funktionen med.

addEvent(newrow, "onmousedown", CallbackVar.CallBack +"('"+CallbackVar.ReturnField+"','"+aRows[i][CallbackVar.ReturnId]+"')");
Avatar billede majbom Novice
02. januar 2009 - 18:15 #10
ja det er lidt tricky, har heller ikke selv *helt* styr på det :S

prøv med:

addEvent(newrow, "mousedown", "CallbackVar.CallBack(CallbackVar.ReturnField,aRows[i][CallbackVar.ReturnId])");
Avatar billede groyk Novice
02. januar 2009 - 20:21 #11
Nu fik jeg skittet til at virke. det skal være "mousedown" ikke "onmousedown"

Og er der en der kan forklare mig hvorfor?

splazz, kan du ikke smide et svar som tak for hjælpen.

Prøv at tage et kig nu. nu skulle det spille.

DET BLIVER PISSE GODT!! TAKKER

http://multipumpen.dk/shop/admin_ny/2.1.php
Avatar billede majbom Novice
02. januar 2009 - 20:27 #12
ja det hjalp jo lidt på det...

grunden til at det ikke skal være med "on" foran, er at alt efter hvilken metode der skal bruges for at tilføje eventhandleren, hedder det "mouseover" eller "ONmouseover", så i tilfældet hvor der skal "on" foran, gør den det selv i funktionen addEvent() - alle eventhandlerne starter på "on"...
Avatar billede majbom Novice
02. januar 2009 - 20:28 #13
og så et svar...

dog synes jeg at roenving skal have halvdelen, da han var først med den korrekte løsning...
Avatar billede groyk Novice
02. januar 2009 - 21:23 #14
OK venter lige. Så kan du også lige smide et svar roenving
Avatar billede roenving Novice
03. januar 2009 - 11:36 #15
Velbekomme '-)
Avatar billede groyk Novice
03. januar 2009 - 20:15 #16
Foresten, lige et sidste spørgsmål

Hvorfor bruger du eval() i din funktion?

Kan den ikke laves uden?

Synes at have hørt at eval er rimelig ressource krævende.
Avatar billede roenving Novice
05. januar 2009 - 16:42 #17
Tak for point ;~}
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