Avatar billede melieha Nybegynder
09. april 2007 - 12:22 Der er 10 kommentarer og
1 løsning

Check om input felt er ændret onkeyup. (Onchange v/tastetryk)

Hejsa, sagen er den at jeg har en række inputfelter som skifter farve når de bliver ændret. Tidligere brugte jeg OnChange funktionen, men af praktiske årsager skal feltet helst skifte farve med det samme der bliver lavet en ændring.
Så forsøgte jeg mig med Keyup/down, hvilket kun er en halv løsning, for det ødelægger muligheden for at tabbe imellem felterne uden at de skifter farve.

Umiddelbart kunne jeg ikke forestille mig at det er specielt svært at lave et check på om inputtet er ændret, men det er ikke umiddelbart lykkes mig :) Koden skal helst være så "simpel" som muligt da den skal oprettes dynamisk, så at hardcode inputfeltets oprindelige værdi er en løsning jeg helst undgår :)
Avatar billede showsource Seniormester
09. april 2007 - 12:25 #1
onkeyup="if(this.value !='')...hvad du nu vil"

så kan du jo bruge tab
Avatar billede showsource Seniormester
09. april 2007 - 12:25 #2
Og der sikkert et navn for tab key ???
Avatar billede melieha Nybegynder
09. april 2007 - 12:42 #3
Tanken er god nok, men så skulle den også helst kompensere for piletaster mm. Jeg kunne forestille mig at det kunne gøres "Rigtigt" på en nem måde, hvis ikke må det blive løsningen :)
Avatar billede roenving Novice
09. april 2007 - 12:56 #4
Brug en afart af 'så ryd dog dig'-scriptet (F.eks. http://roenving.users.whitehat.dk/WD3Input.html !-)

onkeyup="this.style.backgroundColor=this.value!=this.defaultValue?'yellow':''" onblur="this.style.backgroundColor=this.value!=this.defaultValue?'yellow':''"

-- jeg opdagede så, at netop tab-tingen nødvendiggør, at den også findes onblur !o]
Avatar billede melieha Nybegynder
09. april 2007 - 14:58 #5
Jeg tror måske jeg udtrykte mig forkert, undskyld for det :)
Selve farveskiftet foregår ved at den overliggende <tr> får ændret sin class.
Avatar billede roenving Novice
09. april 2007 - 15:07 #6
Det er jo ikke afgørende (selvom det er dumt at skifte klasse on-the-fly !-)

-- så bliver det jo bare:

onkeyup="kaldDinFunktion(this.value!=this.defaultValue?'værdiHvisÆndret':'værdiHvisUændret');"
Avatar billede melieha Nybegynder
10. april 2007 - 15:17 #7
Jeg må undskylde og sige at jeg bliver endnu mere besværlig. Jeg har rodet og bakset med det og kan ikke selv få en løsning kastet sammen som gør som jeg vil.

Problemet ligger i at jeg har flere input felter, som hører under den samme tr (farveskift), hvilket jo ikke ligefrem gør opgaven lettere, for hvis et felt er ændret, men ikke et andet skal der ikke ændres tilbage.

Ligenu bruger jeg følgende (Udsnit):
<td><input type="text" name="bestv0" onKeydown="opdko.style.setAttribute('cssText', 'background-color: #7C1507;');document.updatek.opdko.disabled=false;document.updatek.opdko.style.display='inline';ktr0.className='changed';" style="width: 100%;" value="a" /></td>
<td><input type="text" name="bestt0" onKeydown="opdko.style.setAttribute('cssText', 'background-color: #7C1507;');document.updatek.opdko.disabled=false;document.updatek.opdko.style.display='inline';ktr0.className='changed';" style="width: 100%;" value="a" /></td>

Så det der vel skal laves er et check på om krt0's class er skiftet til "changed", for hvis den er det skal der jo ikke gøres noget, og derefter om det aktive felt er ændret :S
Avatar billede roenving Novice
10. april 2007 - 15:42 #8
Et eksempel, så du kan se, hvad jeg tænker i:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ændr baggrund på række ved ændring i inputs i rækken</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
.formRow{background-color:#ccc;border-collapse:collapse;}
.formRow td{color:green;padding:10px;}
.formRow td input{color:green;}
</style>
<script language="javascript" type="text/javascript">
function showChanges(elm){
  var row = getParent(elm, "tr");
  var inps = row.getElementsByTagName("input");
  var chgd = false;
  for(i=0,im=inps.length;im>i;i++){
    chgd = chgd || inps[i].type == "text" && inps[i].value != inps[i].defaultValue;
  }
  row.style.backgroundColor = chgd ? "yellow" : "";
}
function getParent(elm,tN){
  var parElm = elm.parentNode;
  while(parElm.tagName.toLowerCase() != tN.toLowerCase())
    parElm = parElm.parentNode;
  return parElm;
}
</script>
</head>

<body>

<form>
<table>
  <tr class="formRow">
    <td>
      <input type="text" name="input1" value="Navn1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Navn2" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse2" onkeyup="showChanges(this);"></td>
  </tr>
  <tr class="formRow">
    <td>
      <input type="text" name="input1" value="Navn1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Navn2" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse2" onkeyup="showChanges(this);"></td>
  </tr>
  <tr class="formRow">
    <td>
      <input type="text" name="input1" value="Navn1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Navn2" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse2" onkeyup="showChanges(this);"></td>
  </tr>
  <tr class="formRow">
    <td>
      <input type="text" name="input1" value="Navn1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Navn2" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse1" onkeyup="showChanges(this);"></td>
    <td>
      <input type="text" name="input1" value="Adresse2" onkeyup="showChanges(this);"></td>
  </tr>
</table>
</form>

</body>

</html>
Avatar billede melieha Nybegynder
12. april 2007 - 08:41 #9
Sådan! Det spiller bare :)

Jeg siger tusinde tak for løsningen, så må du jo (Endnu engang) smide et svar og få nogle points :)
Avatar billede roenving Novice
12. april 2007 - 12:04 #10
Velbekomme '-)
Avatar billede roenving Novice
12. april 2007 - 14:40 #11
-- og tak for 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