haiderMedlem sedan jan. 2003956 inlägggetElementsByTagName funkar kanon! (så här långt ;))
För att testa "lokalt", alltså inuti form-taggen, körde jag:
this.form.getElementsByTagName('input')[4]
(jag brukar köra med alert, för att se om jag får nån respons)
Eftersom submitknappen är den femte input-taggen så hittades den utan problem. Fast, jag sitter och tänker lite på vad som kan hända om fler input taggar läggs till i framtiden eller om några forms har fler än fem.
Vi får oroa oss om detta sen, så får vi se om det finns nåt sätt att öka igenom arrayen (det blir väl en array eller hur?) och matcha den mot ett ID.
Frågan jag egentligen behöver ställa är hur jag kan skicka "ut" det värde jag får av det kommandot this.form.getElementsByTagName('input')[4] som ju körs internt, så det används av min externa funktion f(elm)?
haiderMedlem sedan jan. 2003956 inläggPeter, stort tack för tipset om getElementsByTagName. Jag fick lösningen att fungera internt, men det känns fult med en stor javascript-klump mitt i onchange, så jag hoppas du har nåt tips på hur jag kan flytta ut koden så jag kan anropa en extern funktion där all script hör hemma.
PPeter SMedlem sedan dec. 20025 483 inlägg function f(frm, name)
{
var elms = frm.getElementsByTagName("INPUT");
for (var i = 0; i < elms.length; ++i)
{
if (/^image$/i.test(elms[i].type) && elms[i].name == name)
{
elms[i].src = "http://www.webforum.nu/images/wfstandard/misc/navbits_start.gif";
break;
}
}
}
...
onchange="f(this.form, 'pelle')"
...
<input type="image" name="pelle">
haiderMedlem sedan jan. 2003956 inläggKräver det att varje form har ett unikt namn? Eller vet den vilken det är i och med att jag sänder infon om formen genom this.form?
Vad betyder break? Jag tror inte jag har stött på denna förut.
PPeter SMedlem sedan dec. 20025 483 inlägg Nej, vad formuläret har för namn spelar ingen roll - allt sköts genom this.form.
Break betyder att vi hoppar ur loopen; eftersom vi hittat det element vi letat efter finns ingen anledning att låta loopen fortsätta.
haiderMedlem sedan jan. 2003956 inläggStort tack Peter!
Det löste sig galant, med lite omskrivning.
Så här skrev jag om scriptet (för jag behövde stoppa in en else)
function f(frm, name, selectValue)
{
var elms = frm.getElementsByTagName("INPUT");
for (var i = 0; i < elms.length; ++i)
{
if (/^image$/i.test(elms[i].type) && elms[i].name == name)
{
if (selectValue.match(/xxx/)) {
elms[i].src = "/bilder/knapp_disabled.gif";
elms[i].disabled = true;
break;
} else {
elms[i].src = "/bilder/knapp_.gif";
elms[i].disabled = false;
break;
}
}
}
}
Sen anropade jag med:
onChange="f(this.form, 'add', this.value)"
där 'add' är namnet på submit knappen. Den hette så innan, så jag ville lämna det som det var.
Jag kommer troligen döpa om namnet på funktionen för överskådlighetens skull.
Sen försökte jag förstå lite, men misslyckades med den delen; if (/^image$/i.test(elms*.type) && elms*.name == name).
elms*.name tror jag betyder att när den hittar submit-knappens namn, men vad är image-grejen?***
PPeter SMedlem sedan dec. 20025 483 inlägg Du gör helt rätt i att döpa om funktionen :)
Samlingen 'elms' innehåller samtliga formulärelement i formuläret (alla inputs, selects m.fl.).
Delen '/^image$/i' kontrollerar att det formulärelement vi hittat är av typen <input type="image">.
haiderMedlem sedan jan. 2003956 inläggEn tanke slog mig om det här.
Nu är det bara en fundering, men jag vill gärna ta upp frågan i alla fall.
Eftersom jag hade problem med att om första optiontaggen hade "xxx" i sitt värde, så skulle inte funktionen vara till någon nytta, eftersom onchange inte skett ännu. Så jag bestämde mig för att för att submitten är disable redan från början och att första valet är i still med "gör ditt val".
Men så kom jag att tänka på en annan sak, men jag vet inte om det är rätt tänk.
Om man använder sig av en if-sats, och som med hjälp av document.write skriver ut antingen en <input> tag som är enablad eller disablad beroende på första objektets (option-taggen) värde.
Så mitt inne i ett formulär har vi alltså en submit-tag som är utskriven genom javascript. Är det en bra eller dålig sak att göra?