Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
12.05.2012 18:04:41
jQuery .change() |
|
|
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 |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.05.2012 18:22:01
|
|
|
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 |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
12.05.2012 18:24:29
|
|
|
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 |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
12.05.2012 19:14:04
|
|
|
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 |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
12.05.2012 22:29:00
|
|
|
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
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
13.05.2012 11:51:49
|
|
|
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 |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
14.05.2012 07:08:18
|
|
|
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 |
|
 |
Timukas0
HV kasutaja

liitunud: 20.03.2007
|
14.05.2012 11:15:26
|
|
|
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:
|
<script>var test1 = $('#test1'); </script> <script>console.log('test1', test1); </script>
|
Tulemus: test1 [] ehk elementi ei leitud.
Järjestame ümber natuke:
html:
|
<script>var test2 = $('#test2'); </script> <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 |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
14.05.2012 13:56:23
|
|
|
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 |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
14.05.2012 14:18:53
|
|
|
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 |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
14.05.2012 14:25:17
|
|
|
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 |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
14.05.2012 22:21:28
|
|
|
*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 |
|
 |
Vermon
Kreisi kasutaja

liitunud: 04.12.2003
|
26.06.2012 08:36:07
|
|
|
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 |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
26.06.2012 10:53:51
|
|
|
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 |
|
 |
Vermon
Kreisi kasutaja

liitunud: 04.12.2003
|
26.06.2012 20:46:12
|
|
|
Jep, võtan tagasi oma arvamuse
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
0 :: |
12 |
|
tagasi üles |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
01.02.2013 00:42:04
|
|
|
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 |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
01.02.2013 01:54:39
|
|
|
$(window).load() sees on sama probleem?
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Deadlock
Kreisi kasutaja
liitunud: 16.07.2004
|
01.02.2013 10:20:39
|
|
|
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.
_________________ "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 |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
01.02.2013 10:21:42
|
|
|
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 |
|
 |
gandalf
HV kasutaja

liitunud: 01.09.2002
|
05.02.2013 22:56:22
|
|
|
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
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
|