Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Niceform ja tapahtumien kuuntelu?

Sivun loppuun

Paulus M [17.12.2009 16:14:45]

#

Käytän niceformia(Siistimpiä lomakkeita) ja yritän saada tapahtuman kuuntelijan liitettyä select elementtiin.

niceforms:
http://www.emblematiq.com/lab/niceforms/

Siellä kehoitetaan liittämään tapahtuman kuuntelija näin:

el.onblur = function() {
    alert("testi");
}

Mutta mulle jää vähän epäselväksi, että mikä toi el on?
Olen kokeillut näin: var el = document.getElementById("testiSelect");

Mutta testi alerttia ei tule. Osaisko joku auttaa tai onko joku käyttänyt aiemmin niceformeja?

Metabolix [17.12.2009 16:52:00]

#

Helpissä lukee kyllä nimenomaan, että tiettyjen tapahtumien (ainakin onblur ja onfocus) kanssa kuuntelu ei toimi noin. Luepa uudestaan.

Paulus M [17.12.2009 16:57:29]

#

Ok, kiitokset, kokeilenpa ymmärtää :D

EDIT: vähän hankalaa, siis pitäisikö mun pistää toi onblur normaalin tapahtuman kuuntelijan sisään vai?

Vai miten toi oikein on? Pahus ku ei ymmärrys riitä...

tsuriga [17.12.2009 18:33:45]

#

Siellä lukeep, että noissa ylikirjoitettavien eventtien tapauksessa pitää omat koodit lisätä suoraan Niceformsin koodin sekaan.

Paulus M [17.12.2009 18:35:02]

#

Metabolix, pystyisitkö vähän jeesiin, että mikä tuossa on idea?
Auttais ihan sikana, ku ei vaan keksitä täällä työkavereiden kanssa että miten saadaan homma skulaa?

Kai oot Metabolix duunissa ja saat kunnon palkan, jos et oo niin itse ainakin voisin palkata sut vastailee kysymyksiin ja antamaan ideoita joihinkin haastaviin ohjelmointiprojekteihin. :D


EDIT: katos, triruga vastas jo. Kiitti! Tulee kuitenkin heti mieleen, että jos ne heitetään niceform.js scriptiin, niin mitenköhän saadaan oikealle id elementille kuuntelija.

tsuriga [17.12.2009 18:49:54]

#

Tarkastelee el.onblur-funkkarissa, mihin elementtiin this viittaa.

Metabolix [17.12.2009 19:08:07]

#

Voithan lisätä sinne esimerkiksi tällaisen rivin:

if (this.real_onblur) this.real_onblur();

Sitten vain asetat omassa koodissasi real_onblur-funktion haluamillesi elementeille.

Paulus M [18.12.2009 15:13:54]

#

Ok, kiitti tiedoista kaverit!

Sain nyt ton tapahtuman kuuntelijan toimimaan ja ymmarran tuon this elementin kayton, mutta niita niceformin muuttujia, jota this objekti sisaltaa ei olla vissiin dokumentoitu?
EDIT: tai tietenkaan toi ei ole this objekti, vaan se objekti johon this viittaa.

Mun pitaisi saada select elementin id ja sen arvo selville ja olen kokeillun mm. seuraavia, mutta mikaan naista ei onnistunut:
this.id, this.elementId, this.value, this.selectedValue. Mikakohan voisi olla oikea muuttujan nimi ja mista loydan noi nimet?

Sori ku joudun viela vaivaan tan verran...

tsuriga [18.12.2009 17:01:36]

#

Voit asettaa Firebugilla koodiriveille breakpointteja, joiden avulla pääset tarkastelemaan senhetkistä tilannetta, mm. siis this-viittausta ja niitä arvoja.

Paulus M [18.12.2009 17:25:10]

#

Aivan, niinpa tietenkin. Mietinkin etta onkohan jotain tapaa milla saada kaikki muuttujan nakyviin, mutta eipa taaskaan tullut mieleen. kiitti vaivannaosta tsuriga.

tsuriga [18.12.2009 20:28:40]

#

Jos noita elementtejä on sitten useampia niin Metabolixin neuvoma tapa on elegantimpi. Melkeen suosittelisin käyttämään sitä suoraan, syistä että se 1) ei ole tungetteleva (engl. non-intrusive) eikä täten sotke Niceformsin koodia juurikaan, 2) on laajennettavissa koskemaan useampia elementtejä ilman koodimuutoksia, ja 3) mukailee nykyään suositun nk. ominaisuus-testauksen periaatetta (selaintarkistusten sijaan tarkistetaan, onko ko. ominaisuus tuettu).

Paulus M [21.12.2009 15:38:22]

#

Okei, no mites ne funktiot lisätään, näinkö?

...

	el.unload = function() {
		this.parentNode.removeChild(this.dummy);
		this.className = this.oldClassName;
	}
	el.dummy.onclick = function() {
	if (this.realOnClick) this.realOnClick(); //tähän heitin nyt tuon funktion.


...




var e=document.getElementById("aloitusviikko")
e.realOnClick=function()
{
	alert(testi);
	//paivitaTulosteet("aloitusviikko", valittuarvo.value);
}

Paulus M [21.12.2009 20:12:09]

#

Tai mistä voisi johtua, että toi this.id näyttää tyhjää, vaikka id on määritelty?

tsuriga [22.12.2009 02:23:19]

#

This viittaa johonkin toiseen olioon. Jos kutsuit eventtiin sidotussa funktiossa tuota realOnClick-funktiota, this ei muistaakseni viittaa siellä enää eventin laukaisseehen elementtiin. Heitä se funkkarille vaikka parametrinä.

Metabolix [22.12.2009 11:29:37]

#

Tässä on pieni esimerkki objekteista:

var otus = {
  nimi: "Olli Olio",
  juttu: function(hei) {
    alert(this.nimi + " sanoo " + hei + "!");
  }
};
var toinen = {
  nimi: "Pekka Pesukarhu"
};
otus.juttu("hei"); // this == otus; Olli Olio
otus.juttu.call(toinen, "iltaa"); // this == toinen; Pekka Pesukarhu
toinen.testi = otus.juttu;
toinen.testi("hei taas"); // this == toinen; Pekka Pesukarhu

Paulus M [22.12.2009 16:28:48]

#

Joo, kiitokset taas näistä vinkeistä.

Kuitenkin pahus vie ku en mistään löydä tuota id:tä, kaikki id:t on yleensä tyhjiä ja yhden kerran on näyttänyt vain oikean id:n.


kuitenin firebug näyttää ilmeisesti muutaman muutajan, vai liekö sitten objekteja, koska ne voi avata tuosta plus symbolista. Mutta ilman avausta näkyy yhden objektin perässä tälläinen arvo: "select#aloitusviikko.NFhidden"
ja siinä on sisällytetty toi aloitusviikko(id), niin olisikohan mitään keinoa saada tämä arvo käyttöön ja sitä kautta poimia id?

Eli toi teksti löytyy tälläisestä elementistä this->nextSibling.
Mutta jos sen avaa, niin tulee taas iso liuta muuttujia.

alert(this.nextSibling) taas antaa luonnollisesti arvoksi objektin tyypin: "object HTMLselectElement".

Eli osaisiko joku sanoa, mites saisin poimittua tuon arvon, joka on tuon nextSibling objektin perässä firebugin oikean puoleisessa ikkunassa.

tsuriga [26.12.2009 17:13:01]

#

Ne ovat objekteja. Oisko this.nextSibling.id?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta