webForumDet fria alternativet

onChange

JavaScript

12 svar · 708 visningar · startad av haider

Medlem sedan jan. 2003956 inlägg
Frågan#1

Hej!

Jag har ett scriptkommando som lyder showdiv()". Vad den funktionen gör är att den visar en dold div.

Jag vill applicera en onChange på samtliga input-taggar i en sida. Måste jag lägga en onChange på alla eller kan man köra något globalt för hela sidan?

edit: strunt i denna fråga: För övrigt, fungerar onChange så fort jag har skrivit in första bokstaven i en input eller först är jag lämnar input rutan?
Det är onKeyDown som lämpar sig bäst för vad jag vill åstadkomma.

Medlem sedan juni 20019 519 inlägg
#2

onBlur när du lämnar, onChange är så fort du ändra ett tecken i ditt fält. Du kan ju göra någon "addEvent" loop för att lägga in det i varje input fält du har.

Medlem sedan jan. 2003956 inlägg
#3

tja!

Jag har kommit fram till att om jag i slutet av scriptet skriver så här:
document.onKeyDown = showdiv
... så gör den det jag vill göra. Det finns dock ett problem. Den känner av en KeyDown oavsett var jag befinner mig.
Kan man få den att lyssna efter KeyDown endast när jag är i en input?

Medlem sedan juni 20019 519 inlägg
#4

onblur kan du göra någon "flagga" som sätts till true = om denna flagga är true = showdiv, och så fort vi har visat den så sätter vi flaggan till false.

Medlem sedan jan. 2003956 inlägg
#5

Men då måste man ha en onblur för varje input i sidan eller?

Medlem sedan juni 20019 519 inlägg
#6

Tror det

Medlem sedan dec. 20025 483 inlägg
#7

I onload:

var formName = "MyForm";
var elms = document.forms[formName].elements;
for (var i = 0; i < elms.length; ++i)
  if (/^input$/i.test(elms[i].nodeName))
    elms[i].onkeydown = showdiv;
Medlem sedan jan. 2003956 inlägg
#8

voigtann: Det är just vad jag försöker undvika. Annars hade jag i varje input-tagg skrivit onKeyDown="showdiv" så vet jag att det funkar.
Jag vill istället göra en global lösning som kör showdiv oavsett vilken input jag ändrar texten i.

Peter: Tack för koden, men den tycks dessvärre inte fungera. Jag testade även på document.getElementsByTagName('input').onkeydown = showdiv men så gör man visst inte.

Medlem sedan juni 20019 519 inlägg
#9
var elms = document.getElementsByTagName("input");
for (var i = 0; i < elms.length; i++)
    elms[i].onkeydown = showdiv;

getElementsByTagName retunera en array av html elements. Men detta gör egentligen samma sak som onkeydown="showdiv()" Du måste ha den i onload annars hittar den inte input fälten.

Medlem sedan dec. 20025 483 inlägg
#10

haider skrev:

Peter: Tack för koden, men den tycks dessvärre inte fungera

Vad är det som inte fungerar? Hur testar du?

Medlem sedan jan. 2003956 inlägg
#11

okej båda
det tycks vara jag som har missat nåt.

Ni skriver båda att jag ska ha kodsnutten i onLoad. Hur stoppar jag in hela det här paketet i onLoad?
Ska jag skapa en egen funktion för just den kodsnutten och anropa den i onLoad (i body-taggen eller?)

Medlem sedan dec. 20025 483 inlägg
#12

Ett exempel:

window.onload = function()
{
    // koden här
}
Medlem sedan jan. 2003956 inlägg
#13

Jaha, nu funkar det :)

Scriptet ser alltså ut så här:

function hidediv() { 
if (document.getElementById) { // DOM3 = IE5, NS6 
document.getElementById('hideShow').style.visibility = 'hidden'; 
} 
else { 
if (document.layers) { // Netscape 4 
document.hideShow.visibility = 'hidden'; 
} 
else { // IE 4 
document.all.hideShow.style.visibility = 'hidden'; 
} 
} 
}

Är enda sättet att skapa en ny funktion och låta den köras vid onload, eller kan man baka in koden jag fick i ovanstående kod?
Kanske spelar det ingen roll?

255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)