Avatar billede masteraaen Novice
01. november 2010 - 22:17 Der er 10 kommentarer og
1 løsning

Tilføj element - onChange fungerer ikke

Hej.

Jeg har et script, der tilføjer nye rækker i en tabel. Der er i en celle brug for en onChange, der kalder en funktion, når celleværdien ændres. Der skal kunne sendes en parameter med i funktionskaldet.

Jeg har fundet frem til følgende, som jeg dog ikke kan få til at fungere:

  belob.onChange =function() {SumBelob(iteration)};

(det med at indsætte celler, rækker osv, værdier osv, fungerer fint).

Men den kalder ikke funktionen, når jeg ændrer celleværdien i den 'nye' input-celle.

Hvordan fffff får jeg det til at fungere :-) ??
Avatar billede softspot Forsker
01. november 2010 - 22:26 #1
Er du opmærksom på at onchange først kaldes, når du forlader feltet?

Hvis du gerne vil have opdateringen til at ske når du taster/ændrer værdien, kan du f.eks. reagere på keypress eller keyup.
Avatar billede masteraaen Novice
02. november 2010 - 11:15 #2
Ja, den er jeg opmærksom på.

Det skal være onChange, idet det bruges til at kontrollere værdien i feltet og evt. returnere denne i et andet format.

Jeg fatter ikke, den ikke kører funktionen.
Avatar billede softspot Forsker
02. november 2010 - 11:23 #3
Kan du evt. prøve at vise den relevante kode, som sætter rækkerne og eventhandleren for de enkelte celler op?
Avatar billede gbjensen65 Nybegynder
02. november 2010 - 17:38 #4
Hvordan ser din HTML formular ud ?

Jeg bruger f.eks. en kode som denne:

<select name="brewid" id="brewid" size = "1" onchange="ajaxUpdateRetBeer();">

Kan det evt. skyldes at der er en fejl i dit javascript inden din kode kaldes, har du f.eks. en reference til en ukendt DOM id eller en DOM id der er mere end en af kan få det til at fejle.
Avatar billede masteraaen Novice
02. november 2010 - 19:34 #5
Hej

Det ser sådan her ud:


<script type="text/javascript">
function addRowToTable()
{
  var tbl = document.getElementById('belobtabel');
  var lastRow = tbl.rows.length;
  // if there's no header row in the table, then iteration = lastRow + 1
  var iteration = lastRow;
  var row = tbl.insertRow(lastRow);
 
    // celle: Belob
  var cellbelob = row.insertCell(5);
  var belob = document.createElement('input');
  belob.type = 'text';
  belob.name = 'Belobname' + iteration;
  belob.id = 'Belob' + iteration;
  belob.size = 17;
  belob.onChange =function() {SumBelob(iteration)};
  cellbelob.appendChild(belob);

... osv.

Det er "  belob.onChange =function() {SumBelob(iteration)};" jeg ikke kan få til at virke.

Jeg har prøvet både i <head>, efter <head> og før og efter <body>...

:-(
Avatar billede majbom Novice
02. november 2010 - 19:50 #6
det er fordi du ikke bare kan tilføje events på den måde...

prøv med denne kode:

if(button.addEventListener){
  button.addEventListener("change", function(){testFunc('hej hej')}, true);
}else if(button.attachEvent){
  button.attachEvent("onchange", function(){testFunc('hej hej')});
}else{
  button.onchange = function(){testFunc('hej hej')};
Avatar billede masteraaen Novice
02. november 2010 - 20:41 #7
Ahaa!

Snupsede lige denne del:
button.attachEvent("onchange", function(){testFunc('hej hej')});

Den fungerer upåklageligt.

Mange mange tak - vil du smide et svar?
:)
Avatar billede masteraaen Novice
02. november 2010 - 20:42 #8
Blot til info blev den ændret til:

  belob.attachEvent("onchange", function(){SumBelob(iteration)});
Avatar billede majbom Novice
03. november 2010 - 09:17 #9
du bør smide 'min' kode i en funktion og brug denne funktion når du skal tilføje events, da det afhænger af browseren, hvilken af de 3 du skal bruge...
Avatar billede masteraaen Novice
03. november 2010 - 10:42 #10
Ok tak. Værdifuld info.
Avatar billede majbom Novice
03. november 2010 - 10:53 #11
selv tak :)
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