[JavaScript] textfield value change detecteren

Pagina: 1
Acties:

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
probleempje, ik heb het volgende:

code:
1
2
3
4
5
6
7
<form name="test">
    <input type="text" name="test" onChange="alert('doe iets')">
</form>

<script>
    test.test.value = "bla";
</script>

waarom detecteerd de input niet dat de waarde wordt gewijzigd door het stukje script eronder, en hoe kan ik dit regelen. De onChange werkt namelijk pas op het moment dat de input de focus verliest, maar in het geval hier heeft de input helemaal de focus niet.

bvd!

[ Voor 15% gewijzigd door Stephan Oudmaijer op 24-09-2003 13:54 ]


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

Welkom in P&W: FAQ en Beleid *updated: 05-07* al een bekeken? best leerzaam

Doet iets met Cloud (MS/IBM)


  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
zeker gelezen :) maar niet goed blijkbaar 8)7

[ Voor 7% gewijzigd door Stephan Oudmaijer op 24-09-2003 13:56 ]


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Javascripts hoort bij de helden van Webdesign & Graphics
Succes

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 10:29
Een eventlistener word niet getriggered door javascript zelf. Dus je moet dan in javascript zelf de alert nogmaals aanroepen om deze ta activeren. Dit hebben ze gedaan op triggerloops te voorkomen volgens mij.

  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

Je gebruikt ook 2 keer de naam test, dat mag niet. Misschien dat het daar aan ligt?

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Eskimootje schreef op 24 September 2003 @ 13:58:
Een eventlistener word niet getriggered door javascript zelf. Dus je moet dan in javascript zelf de alert nogmaals aanroepen om deze ta activeren. Dit hebben ze gedaan op triggerloops te voorkomen volgens mij.
@Eskimootje

in die onChange staat normaal een andere functie die moet worden aangeroepen, die alert() staat er nu voor de test..

@ andre:

het stukje code werkt wel maar niet zoals ik wil :) die 2x test mag trouwens.

[ Voor 12% gewijzigd door Stephan Oudmaijer op 24-09-2003 14:02 ]


  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 10:29
CK schreef op 24 September 2003 @ 14:01:
[...]


in die onChange staat normaal een andere functie die moet worden aangeroepen, die alert() staat er nu voor de test..
dan roep je die nogmaals aan :)

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Je kan wel het volgende gebruiken, maar dan moet je zelf maar bepalen of dat bruikbaar is voor jouw situatie:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script bla bla>
function BtM909(){
  document.forms['frTest'].elements['elTest'].focus();
  document.forms['frTest'].elements['elTest'].value = "bla";
}

window.onload = BtM909;
</script>

<body>
<form name="frTest">
  <input type="text" name="elTest" onKeyup="alert('doe iets')" value="randy">
</form>
</body>

Probeer niet direct in je body meteen achter een form element een javascript uit te voeren op dat element. Dat gaat nl. pas werken als het element daadwerkelijk gerendered is.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • André
  • Registratie: Maart 2002
  • Laatst online: 19-08 12:30

André

Analytics dude

CK schreef op 24 September 2003 @ 14:01:
[...]


@ andre:

het stukje code werkt wel maar niet zoals ik wil :) die 2x test mag trouwens.
Die 2 keer test mag niet, je behoort alle elementen een unieke naam te geven.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Eskimootje schreef op 24 september 2003 @ 13:58:
Een eventlistener word niet getriggered door javascript zelf. Dus je moet dan in javascript zelf de alert nogmaals aanroepen om deze ta activeren. Dit hebben ze gedaan op triggerloops te voorkomen volgens mij.
Klopt, anders zou dit voorbeeld een oneindige loop veroorzaken:

HTML:
1
<input type="text" onchange="this.value='bla';" />


en de oplossing hiervoor ligt dus voor de hand: bij een wijziging mbv javascript dus ook de functie uit je onchange nog eens los aanroepen :)

Intentionally left blank


  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Eskimootje schreef op 24 September 2003 @ 14:02:
[...]

dan roep je die nogmaals aan :)
hehe, ok ik zal het probleem uitleggen:

ik heb een input veld waar een datum in moet komen. Die datum kan uit een pop-up scherm worden gekozen, die pop-up weet welk veld hem aangeroepen heeft en vult in dit veld te gekozen datum in. Op het moment dat die datum in het veld ingevuld wordt moet namelijk nog een ander veld aanpast worden.

dus ik moet detecteren wanneer ik dat andere veld moet updaten. Ik dacht dus dat kan wel met onChange maar dit gaat niet op.

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

André schreef op 24 September 2003 @ 14:04:
[...]

Die 2 keer test mag niet, je behoort alle elementen een unieke naam te geven.
Een name property hoeft niet uniek te zijn hoor :)

Ik ben het echter wel met je eens dat het niet netjes is ;)

Intentionally left blank


  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
crisp schreef op 24 september 2003 @ 14:04:
[...]

Klopt, anders zou dit voorbeeld een oneindige loop veroorzaken:

HTML:
1
<input type="text" onchange="this.value='bla';" />


en de oplossing hiervoor ligt dus voor de hand: bij een wijziging mbv javascript dus ook de functie uit je onchange nog eens los aanroepen :)
was ik al bang voor :( iig bedankt voor de moeite :)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

CK schreef op 24 September 2003 @ 14:06:
[...]


was ik al bang voor :( iig bedankt voor de moeite :)
Je zou kunnen uitvragen of het veld een onchange attribuut heeft, en de content daarvan kunnen evalueren. Het enige nadeel is dat een eval altijd in de scope van het window object wordt uitgevoerd, dus het keyword this verwijst dan niet naar het input element. Ik heb hier al vaker over nagedacht, maar er nog geen andere mooie oplossing voor kunnen verzinnen...

correctie:

JavaScript:
1
2
3
4
5
6
7
function doOnchange(frm,el) {

  if (typeof document.forms[frm].elements[el].onchange == 'function') {
    document.forms[frm].elements[el].onchange();
  }

}


kinderlijk eenvoudig dus eigenlijk :)

[ Voor 22% gewijzigd door crisp op 24-09-2003 14:18 ]

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

crisp schreef op 24 september 2003 @ 14:13:


correctie:

JavaScript:
1
2
3
4
5
6
7
function doOnchange(frm,el) {

  if (typeof document.forms[frm].elements[el].onchange == 'function') {
    document.forms[frm].elements[el].onchange();
  }

}


:)
Dit kan idd ook O-)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Je hebt in IE het onpropertychange event. Misschien is daar iets mee te doen.
In Mozilla heb je getters en setters, daar is denk ik ook wel wat mee te doen.
Of je zou ook de watch methode kunnen gebruiken in Mozilla, hoewel setters en getters beter zijn.

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Verwijderd schreef op 24 September 2003 @ 14:26:
Je hebt in IE het onpropertychange event.
yes die zocht ik!

thnx!!!!! _/-\o_ :> :P

Verwijderd

Ben even bezig geweest:
code:
1
2
3
4
5
6
7
if (netscape){
var bewaar = HTMLInputElement.prototype.__lookupSetter__("value");
HTMLInputElement.prototype.__defineSetter__("value", function (e) {
bewaar.call(this, e);
alert(e);
});
};

Zo werkt het ook in Mozilla.
Er is wel een verschil. Onpropertychange wordt ook uitgevoerd elke keer als je iets intikt.
Dat geldt niet voor de setter in Mozilla.
Pagina: 1