Avatar billede connorz Nybegynder
20. maj 2003 - 16:08 Der er 22 kommentarer og
2 løsninger

reference til form

Jeg har en form med navnet f. Så har jeg en række radio-buttons med navnet r. hver af disse radiobuttons har attributten 'value' sat til forskellige ting.
Senere i dokumentet har jeg nu et link, der kalder en JS-funktion med
<A href='#' onclick="fun(f.r,'hej')">Link</A>
I min JS-funktion vil jeg nu gerne bruge den værdi, der står den markerede radiobutton. Jeg har prøvet, som en indledende test:
var cmd=formEle.value;
alert(cmd);
men nu bliver der blot udskrevet 'undefined'
Hvad er der galt?
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:11 #1
du bliver lige nød til at poste noget mere kode, så kan jeg også finde ud af det :-)))
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:11 #2
gerne din form - og så din "fun" funktion
Avatar billede roenving Novice
20. maj 2003 - 16:13 #3
<A href='#' onclick="fun(this.form,'hej')">Link</A>
-- forudsat, at links ligger på samme form ...

og

function fun(frm){
  alert(frm.r.selectedIndex.value)
}
Avatar billede roenving Novice
20. maj 2003 - 16:15 #4
function fun(frm,txt){
  alert(txt+", "+frm.r.selectedIndex.value)
}

--sæ'fø'li'
Avatar billede connorz Nybegynder
20. maj 2003 - 16:16 #5
<SCRIPT>
function fun(formEle,event)
{
  var cmd=formEle.value;
  alert(event+cmd);
}
</SCRIPT>

<FORM name='menuForm'>
<INPUT type='radio' value='1' name='r' CHECKED>radio1
<INPUT type='radio' value='2' name='r'>radio2
<INPUT type='radio' value='3' name='r'>radio3
</FORM>

<A href='#' onclick="fun(f.r,'hej');">Link</A>
Avatar billede roenving Novice
20. maj 2003 - 16:18 #6
Så skal det være:

<A href='#' onclick="fun(document.forms[f].r,'hej')">Link</A>
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:29 #7
Dette er måske en meget! omstændig løsning (introduktion af to nye funktioner) ...

men jeg kan ikke få roenving's r.selectedIndex.value til at virke ....


Here goes... Jeg ved i hvert fald at det virker...

<html>
    <SCRIPT>
function getSelectedRadio(buttonGroup) {
  // returns the array number of the selected radio button or -1 if no button is selected
  if (buttonGroup[0]) { // if the button group is an array (one button is not an array)
      for (var i=0; i<buttonGroup.length; i++) {
        if (buttonGroup[i].checked) {
            return i
        }
      }
  } else {
      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
  }
  // if we get to this point, no radio button is selected
  return -1;
} // Ends the "getSelectedRadio" function

function getSelectedRadioValue(buttonGroup) {
  // returns the value of the selected radio button or "" if no button is selected
  var i = getSelectedRadio(buttonGroup);
  if (i == -1) {
      return "";
  } else {
      if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)
        return buttonGroup[i].value;
      } else { // The button group is just the one button, and it is checked
        return buttonGroup.value;
      }
  }
} // Ends the "getSelectedRadioValue" function


function fun(formEle,event)
{
    cmd = getSelectedRadioValue( formEle );
  alert(event+cmd);
}
</SCRIPT>

<body>
<FORM name='menuForm'>
<INPUT type='radio' id="r1" value='1' name='r' CHECKED>radio1
<INPUT type='radio' id="r2" value='2' name='r'>radio2
<INPUT type='radio' id="r3" value='3' name='r'>radio3
</FORM>

<A href='#' onclick="fun(menuForm.r,'hej');">Link</A>
</body>
</html>
Avatar billede roenving Novice
20. maj 2003 - 16:33 #8
Selvfølgelig kan du ikke det -- det ka' jeg heller ikke -- var for fokuseret på den manglende reference igennem hierarkiet:

function fun(frm,txt){
  alert(txt+", "+frm.r[frm.r.selectedIndex].value)
}
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:37 #9
Hmm ... for mig giver
  frm.r.selectedIndex

eller som den hedder i min version
  formEle.selectedIndex (formEle == menuForm.r)

stadigvæk "undefined" .... :-/
Avatar billede roenving Novice
20. maj 2003 - 16:38 #10
Det er da klart -- hvordan skal javascript vide hvad menuform er ?-)

er det det stykke papir pizzamanden skriver priserne på ?-)))
Avatar billede roenving Novice
20. maj 2003 - 16:40 #11
Du er nødt til omstændeligt at forklare javascript, hvad det er du snakker om:

document.forms[f].r
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:41 #12
nu har jeg lavet kodet - helt efter din måde - og den fejler hos mig (frm.r.selectedIndex == undefined)

Her er den kode, som jeg bruger....

function roenvingFun( frm, txt) {
    alert( frm.r.selectedIndex );  // giver "undefined"
    alert(txt+", "+frm.r[frm.r.selectedIndex].value); // fejer da frm.r[undefined].value ikke kan findes...
}

<body>
  <FORM name='menuForm'>
    <INPUT type='radio' id="r1" value='1' name='r' CHECKED>radio1
    <INPUT type='radio' id="r2" value='2' name='r'>radio2
    <INPUT type='radio' id="r3" value='3' name='r'>radio3
  </FORM>
  <A href='#' onclick="roenvingFun(menuForm,'hej');">Link</A>
</body>


Og i den lange kode, som jeg sendte med, kunne den sagtens finde ud af, hvad "menuForm" er (se evt. den kodestump, som connorz sendte med :-)
Avatar billede roenving Novice
20. maj 2003 - 16:46 #13
<A href='#' onclick="roenvingFun(document.forms[menuForm],'hej');">Link</A>
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:46 #14
Kig evt. her (http://www.eksperten.dk/spm/243478), hvor der udtrykkes, at selectedIndex ikke findes på radioknapper...
Avatar billede roenving Novice
20. maj 2003 - 16:53 #15
-- jeg bukker mig i støvet ...  <:~\
Avatar billede bearhugx Nybegynder
20. maj 2003 - 16:55 #16
??? ... Du behøver skam ikke at bukke og da slet ikke i støvet...

:-))
/Søren

PS: har du ICQ eller lign ...
Avatar billede connorz Nybegynder
20. maj 2003 - 17:00 #17
jeg har msn - men det var nok ikke mig du mente :/

Dvs. der ikke er en simpel løsning på problemet?
Det eneste funktionen skal, er at finde ud af, hvilken radiobutton der er trykket på!
Avatar billede connorz Nybegynder
20. maj 2003 - 17:06 #18
ok - til mit formål kunne jeg bruge
formEle[0].checked
formEle[1].checked
osv.
Avatar billede connorz Nybegynder
20. maj 2003 - 17:07 #19
roening>>> smid et svar - du skal også have lidt for ulejligheden ;)
Avatar billede roenving Novice
20. maj 2003 - 17:13 #20
oki, da ...

>>bearhugx
I princippet er det da en utilstrækkelig reference, sådan som jeg har læst mine lærebøger, men der er selvfølgelig ikke nogen tvivl om hvilket element, som kan matche navnet -- men window kan (næsten) altid udelades, men også document ... ?-|)

-- har du forøvrigt nogen ide om, hvilke javascript-fortolkere (læs browsere) som aldrig vil tvivle ?-) -- jeg har nemlig ikke ...
Avatar billede bearhugx Nybegynder
20. maj 2003 - 17:33 #21
roenving >> jeg har ikke nogen ide, iht. dit sidste spm - og for at være absolut på den sikre side bør man da nok også hente den pågældende form fra forms-collectionen dvs.
  fun( document.forms[menuForm], 'Hej' );

Men hele springpunktet i dette spørgsmål (eller i hvert fald, forskellen i vores løsninger) lå ikke i form-referencen - men mere om der rent faktisk _er_ en selectedIndex for radioknapper... Det er der ikke - og derfor er man nødsaget til at søge samlingen af knapper igennem indtil man finder en der er checked...
I dette tilfælde ser det ud til at der ikke er nogen genvej - omend jeg da hjertensgerne så det - (og også synes at det kun var hensigstmæssigt....)

/Søren
Avatar billede roenving Novice
20. maj 2003 - 17:38 #22
-- man kan ihvertfald sige vi havde forskellig focus() *g*

-- og hvis man har større mængder af radios, som man skal gøre noget ved før en submit, skulle man nok opbygge sin egen custom-funktion (med udgangspunkt i onclick vil jeg tro !-)
Avatar billede roenving Novice
20. maj 2003 - 17:40 #23
PS! Jeg tænkte første gang over selectedIndex ved 20/05-2003 16:46:16

-- som ovenfor skrevet fokuserede jeg på reference-hierarkiet ...
Avatar billede roenving Novice
20. maj 2003 - 19:09 #24
Takker 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