Avatar billede mobildata Nybegynder
19. december 2006 - 10:48 Der er 7 kommentarer

function med elementbyname

Jeg har denne function
som skal lægge "1" til eller trække "1" fra en given inputboks.

jeg har så en plus og minus knap ud for hver input boks.

det virker fint hvis jeg lave følgende
onclick="document.form.felt1.value++;" for hver eneste felt op og ned.

men da jeg gerne vil optimere det lidt ville jeg kalde nedenstående funktion med onclick="action(felt1, 1)"

men får en fejl der siger at objektet understøtter ikke denne handling, hvad gør jeg forkert?



function action(field, event){
if (event == 0){
document.getElementByName("field").value--;

}
else if (event == 1) {
document.getElementByName("field").value++;
}
}
Avatar billede madeindk Nybegynder
19. december 2006 - 11:25 #1
function action(field, event)
{

  if (event == 0)
  {
  document.getElementByName(field).value--;
  }
  else if (event == 1)
  {
  document.getElementByName(field).value++;
  }

}
Avatar billede olebole Juniormester
19. december 2006 - 13:26 #2
<ole>

Næææhh - metoden hedder 'getElementsByName'! Her er s'et meget vigtigt, da der jo returneres et array af elementer - og der derfor også skal udvælges ét af dem  ;o)

function action(field, event)
{

  if (event == 0)
  {
  document.getElementsByName(field)[0].value--;
  }
  else if (event == 1)
  {
  document.getElementsByName(field)[0].value++;
  }

}

/mvh
</bole>
Avatar billede olebole Juniormester
19. december 2006 - 13:29 #3
Men du kunne jo også slanke din funktion lidt:

function action(field, event)
{

  document.getElementsByName(field)[0].value += event;

}

- og så kalde med f.eks:
    onclick="action('gnu', 1)"

- eller:
    onclick="action('gnu', -1)"

- alt efter, om der skal tælles op eller ned  =)
Avatar billede olebole Juniormester
19. december 2006 - 13:31 #4
Dog skal du passe på! For at være helt sikker på, feltets værdi tolkes som et tal - og ikke som en tekststreng - bør du faktisk skrive:

function action(field, event)
{
  var val = document.getElementsByName(field)[0].value * 1;
  document.getElementsByName(field)[0].value = val + event;

}
Avatar billede mobildata Nybegynder
21. december 2006 - 11:09 #5
jeg får desværre stadig fejlen med at "objektet ikke understøtter denne handling"

se f.eks denne kode:

<script language="JavaScript">
function action(field, event)
{
  var val = document.getElementByName(field)[0].value;
  document.getElementsByName(field)[0].value = val + event;
}
</script>
<form name="skema">
<table>
    <tr>
      <td><span class="style1">felt 1</span></td>
      <td><input class="input" name="felt1" type="text" value="0" size="3" maxlength="3" readonly></td>
      <td><input type=button class="up" accesskey="b" onClick="action(felt1,1);" ondblClick="action('felt1', 1);"></td>
      <td><input type="button" class="down" onClick="action('felt1', -1)" ondblClick="action('felt1', -1)"></td>
      </tr>
</TABLE>

</form>
Avatar billede olebole Juniormester
21. december 2006 - 13:01 #6
Du er nu heller ikke god til at skrive af  =)

<script type="text/JavaScript">
function actions(field, event)
{
  var val = document.getElementsByName(field)[0].value * 1;
  document.getElementsByName(field)[0].value = val + event;
}
</script>
<form name="skema">
<table>
    <tr>
      <td><span class="style1">felt 1</span></td>
      <td><input class="input" name="felt1" type="text" value="0" size="3" maxlength="3" readonly></td>
      <td><input type=button class="up" accesskey="b" onClick="actions('felt1',1);" ondblClick="actions('felt1', 1);"></td>
      <td><input type="button" class="down" onClick="actions('felt1', -1)" ondblClick="actions('felt1', -1)"></td>
      </tr>
</TABLE>

</form>

- og så har jeg ændret funktionens navn, da 'action' jo er reserveret i JS  =)
Avatar billede mobildata Nybegynder
22. december 2006 - 14:44 #7
Så virker det bare, jeg prøvede flere muligheder også med "value * 1" det der gav fejlen var navnet action,

Mange tak for hjælpen! Læg et svar til 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