Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  jQuery .change() märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 12.05.2012 18:04:41 jQuery .change() vasta tsitaadiga

Mul on mõistus otsas. Juba pool tundi jändan mingi pisikese probleemiga:

javascripti osa:

<script type="text/javascript">      
   $('#types').change(function() {
        alert('Handler for .change() called.');
   });
</script>

html osa:

<select name ="types" id="types">
   <option>X</option>
   <option>Y</option>
   <option>Z</option>
   <option>W</option>
</select>


error console mingeid erroreid ei näita, ja vastav javascripti funktsioon ei käivitu. jQuery on imporditud.

siin kellelgi sama probleem: http://forum.jquery.com/topic/binding-an-event-to-a-select-onchange

_________________
"Believe you can, believe you can't; either way, you're right." - Henry Ford
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.05.2012 18:22:01 vasta tsitaadiga

Sa pead javascripti käivitama peale lehe laadimist, muidu pole tal kusagilt neid andmeid võtta. Kas selliselt (enamlevinud)
või kirjutad oma koodi lihtsalt lehe lõppu.
Huvitav, et JQ on sellised vead maha keeratud, kui puhta JS baasil proovid elementi sisse lugeda, ennem , kui leht laetud antakse kohe veateade.

<script type="text/javascript">   
$(document).ready(function(){   
    $('#types').change(function() {
         alert('Handler for .change() called.');
    });
   
   });
</script>

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 12.05.2012 18:24:29 vasta tsitaadiga

Uhhh tänud. Varem pole sellist probleemi olnud.
_________________
"Believe you can, believe you can't; either way, you're right." - Henry Ford
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 12.05.2012 19:14:04 vasta tsitaadiga

Sisse harjunud selliste asjade vältimiseks eraldi init() vms funktsioon teha lehe valmis seadmiseks, mida siis .ready() funktsiooni seest välja kutsuda.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 12.05.2012 22:29:00 vasta tsitaadiga

Probleem pole tegelikult mitte selles, et elemente pole olemas, vaid selles, et jQuery pole laetud. Laetakse ta teadupärast sel hetkel, kui ta alla jõuab kliendile. Peale seda käivitatakse ka jQuery spetsiifiline kood. Mis muidugi ei tööta kõigi funktsioonide puhul.

Lisaks:
$(document).ready(function(){
});

ja
$(function(){
});

Teevad täpselt sama asja. Üks on lihtsalt kiirem kirjutada.

$("selector").dosomething();


asemel võib ka kirjutada

jQuery.("selector").dosomething();


Lihsalt, jällegi, üks neist on kiirem ja lihtsam kirjutada icon_smile.gif

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 13.05.2012 11:51:49 vasta tsitaadiga

Võimalik, et ka selles, kuid ka puhast JavaScripti kasutades ei saa enne lehe laadimist elemente kasutada, kood peab vähemasti kasutatavast elemendist kas või rida allpool olema, kui ei kasutata redy funktsiooni.
_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 14.05.2012 07:08:18 vasta tsitaadiga

jQuery puhul pole oluline kus see kood asub. Tolle spetsiifilist koodi ei käivitata nii ehk naa enne, kui jQuery laetud pole.
_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
Timukas0
HV kasutaja
Timukas0

liitunud: 20.03.2007




sõnum 14.05.2012 11:15:26 vasta tsitaadiga

Mis mõttes ei ole vahet, kus kood asub? Nagu andrusny ütles, peab element olemas olema, enne kui sellele ligi pääseb. Võtame kaks näidet:
html:
  1. <script>var test1 = $('#test1');</script>
  2. <div id="test1"></div>
  3. <script>console.log('test1', test1);</script>

Tulemus: test1 [] ehk elementi ei leitud.
Järjestame ümber natuke:
html:
  1. <div id="test2"></div>
  2. <script>var test2 = $('#test2');</script>
  3. <script>console.log('test2', test2);</script>

ja saame tulemuseks test2 [<div id=​"test2">​</div>​].
Muidugi ready-funktsiooni kasutades vahet ei ole, kus see asub, aga kui kogu JavaScript kood vahetult enne body-tag lõppu panna, pole otseselt ready-funktsiooni vaja kasutadagi.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 14.05.2012 13:56:23 vasta tsitaadiga

Ei ole vahet kui kasutada õigesti, Ehk toppida $(function(){}); vahele. Funktsioone nagunii ei parsita enne nende kasutamist ning lehe laadimisel käivitatav kood sinna vahele toppida ja ei olegi vahet kus see kood on. Miks rääkida ebakorrektsest stiilist?
_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 14.05.2012 14:18:53 vasta tsitaadiga

tsitaat:
Ei ole vahet kui kasutada õigesti, Ehk toppida $(function(){}); vahele.

Kas Sa teemat ikka jälgid ka?
Sellest kõigest on juttu ju olnud. Mis on sinu meelest õigesti, tahad öelda, et koodi lõppu kirjutatud JS osa on valesti?

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 14.05.2012 14:25:17 vasta tsitaadiga

madedog kirjutas:
Probleem pole tegelikult mitte selles, et elemente pole olemas, vaid selles, et jQuery pole laetud. Laetakse ta teadupärast sel hetkel, kui ta alla jõuab kliendile. Peale seda käivitatakse ka jQuery spetsiifiline kood. Mis muidugi ei tööta kõigi funktsioonide puhul.


Ei ole mõtet kägu ajada. Tegu on just sellega, et brauser ei ole ajaks, kui jquery juba laetud on, DOM'i konstrueerimisega valmis saanud. Ehk siis lihtsamalt öeldes ei ole elemente olemas.
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 14.05.2012 22:21:28 vasta tsitaadiga

*Ohe* ma ei hakka vaidlema jQuery ja laadimise koha pealt. Kui reaalsetes olukordades (nii high- kui low bandwidth situatsioonides kui ka testides) piisavalt kasutatud on, siis on selge, et pole mingit vahet kus ta sul asub. Ainukene olukord kus tõesti võib see probleem tekkida, on RIA, kuid seal läheb kood kas laetud elementi või liveQueryga.
_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
Vermon
Kreisi kasutaja
Vermon

liitunud: 04.12.2003




sõnum 26.06.2012 08:36:07 vasta tsitaadiga

Kui sul on lehel asju, mis kaua laevad siis ei soovita ready sisse koodi panna.
Kommentaarid: 14 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 12
tagasi üles
vaata kasutaja infot saada privaatsõnum
neros
HV Guru
neros

liitunud: 26.11.2003




sõnum 26.06.2012 10:53:51 vasta tsitaadiga

Vermon kirjutas:
Kui sul on lehel asju, mis kaua laevad siis ei soovita ready sisse koodi panna.


Unobtrusive javascript. Võid ju vabalt teha funktsiooni ning nupu onClicki sisse toppida, aga see defeatiks UnObt JSi põhimõtte ning üldiselt on heaks tavaks hoida JS ja HTML eraldatult teineteisest.


E: Ja nagu ma juba mainisin, "asjad mis kaua laevad" ehk XMLHttpRequestid (potentsiaalselt, anyway) ei ole üldse küsimuseks, kuna nende puhul on vastav JSi kood kas Observed eventides (jQuery.live() || liveQuery) või hoopistükkis XMLHttpRequesti sees ning käivitatakse siis kui data kuhugi asetatakse. See ei ole siiski failsafe, niiet parim lahendus on kasutada ViewModeli loogikat observable elementidega.

_________________
GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt.
Kommentaarid: 48 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 40
tagasi üles
vaata kasutaja infot saada privaatsõnum
Vermon
Kreisi kasutaja
Vermon

liitunud: 04.12.2003




sõnum 26.06.2012 20:46:12 vasta tsitaadiga

Jep, võtan tagasi oma arvamuse icon_biggrin.gif
Kommentaarid: 14 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 12
tagasi üles
vaata kasutaja infot saada privaatsõnum
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 01.02.2013 00:42:04 vasta tsitaadiga

Tekkis üks huvitav olukord:


for(var j = 0; j < bookmarks.length; j++){         
     alert("blah");
     var str = '#fav_'+bookmarks[j].link;
     $(str).addClass('selected');                        
}   


kui alert() ära võtta, siis addClass ei tööta. Kood käivitatakse, aga vastavale elemendile klassi ei lisata. Ma kujutan ette, et asi töötab alerti tekitatud viite tõttu, aga täpselt küll ette ei kujuta milles probleem, et ilma ei tööta.
Kogu see koodijupp asub JQuery

     $(document).ready(function($) {      

     });

sees

_________________
"Believe you can, believe you can't; either way, you're right." - Henry Ford
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 01.02.2013 01:54:39 vasta tsitaadiga

$(window).load() sees on sama probleem?
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Deadlock
Kreisi kasutaja

liitunud: 16.07.2004




sõnum 01.02.2013 10:20:39 vasta tsitaadiga

Need, div'id kuhu see klass lisatakse, luuakse dünaamiliselt selles samas meetodis just enne selle addClass koodi käivitamist.

Panin $(window).load() sisse ja hakkas tööle, tänan. Põhjused jäävad ikkagi segaseks. icon_razz.gif

_________________
"Believe you can, believe you can't; either way, you're right." - Henry Ford
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 8
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 01.02.2013 10:21:42 vasta tsitaadiga

Bluebull, $(window).load() on laadimistsüklis kaugemal, siis kui ka kõik pildid jne objektid ära laetud.
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
gandalf
HV kasutaja
gandalf

liitunud: 01.09.2002




sõnum 05.02.2013 22:56:22 vasta tsitaadiga

kiire meetod veendumaks, kas jQuery leidis midagi on uurida jQuery objekti pikkust.
console.log($(elem).length);


kui tulemuseks on 0, siis järelikult seda elementi pole sel hetkel ja/või otsid valesti.
kui pidevalt DOMi sisestatakse/eemaldatakse elemente on see üsna sagedane viga.
asünkroonsus on fun icon_smile.gif
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  jQuery .change()
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.