Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
SGM
HV kasutaja

liitunud: 04.12.2005
|
26.03.2009 17:13:58
probla: javascript ei tööta ajax-iga lehel |
|
|
Ma proovisin kasutada sellist asja: http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/
Ja siis, kui kuvab mõne sisuteema ajax-i kaudu, siis sinna ei saa javascripti panna enam! Näiteks lingile klikkides peab tulema mingi lihtne [ok] ja [cancel] asi, aga seda ei tule -- error console ajab möga, et miski asi on undefined. Ometi sama asi 100% identsel kujul toimib lehel, kui ei kuva vajalikku koodi selle ajax-iga tabi sisse...
Ei ole midagi undefined, kui vaadata page source'i
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
26.03.2009 19:26:54
|
|
|
Ja sinu test-case ?
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
26.03.2009 19:56:44
|
|
|
JS sisse ei loeta vist jah, kuna sisu tuleb lehele ju innerHTML abil. See vist välistab igasuguse muu infi peale html elementide. Pealegi sattuksid script ju veidi veidrasse kohta, mingi div sisse.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
26.03.2009 20:02:19
|
|
|
Kas sellele mingit lahendus on olemas?
Mäletan, et mingi ajax-mouseover box kunagi toimis sama tabide süsteemi vanema versiooniga. Selle uuega ei ole proovinud seda mouseoverit.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
26.03.2009 21:35:54
|
|
|
Sellised koodid, mis on linkidele - html elementidele lisatud peaksid toimima, kuna html element loetakse sisse. Näiteks see töötab:
<div id="sisu"></div>
<script>
var R='<a href="y" onmouseover="this.style.color=\'red\';">tere</a>';
document.getElementById("sisu").innerHTML=R;
</script> |
Siis loogiline, et su overid toimisid, kuid eraldi JS värki nagu ei saa kaasa panna.
Näiteks selline asi oleks juba välistatud:
var R='<script> var nr=0; </script><a href="y" onmouseover="this.style.color=\'red\';">tere</a>'; |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
26.03.2009 21:44:10
|
|
|
ah kurivaim... :S
Mul on seal selle AJAX-tabi sees just php-ga tehtud loetelu ja seal on igale lingile dünaamiliselt antud väärtus. Umbes nagu nii: <a href="javascript:tee_midagi_<?=$number?>()">Tee midagi!</a>
Ja kas seda ei saakski kuidagi tööle siis?
Ah jaa, see "tee_midagi_#()" on eelnevalt muidugi ka <script> tagide vahel väikese koodijupiga defineeritud.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
28.03.2009 01:23:44
|
|
|
Kui sa seda tee_midagi_# funktsiooni üritadki <script> tagiga uues sisus edasi anda, siis see ongi kogu probleem, miks asi ei tööta.
Aga, selle vastu leidub rohtu.
Teed näiteks sellise funktsiooni:
function setInnerHTML(elem, html) {
elem.innerHTML = html;
var scripts = elem.getElementsByTagName('SCRIPT');
for(var i = 0; i < scripts.length; i++) {
try{eval(scripts[i].innerHTML);}catch(Ex){}
}
}
|
Ja kasutad siis nii:
setInnerHTML(document.getElementById('sisu'), xml.responseText);
Ja tulemuseks on see et kõik script tagide sisud evalitakse ära.
Samasuguse eval loogika põhjal töötab näiteks ka icefaces framework ja pakun et ka muudki frameworkid.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
28.03.2009 13:36:44
|
|
|
inzinz kirjutas: |
Teed näiteks sellise funktsiooni:
function setInnerHTML(elem, html) {
elem.innerHTML = html;
var scripts = elem.getElementsByTagName('SCRIPT');
for(var i = 0; i < scripts.length; i++) {
try{eval(scripts[i].innerHTML);}catch(Ex){}
}
}
|
Ja kasutad siis nii:
setInnerHTML(document.getElementById('sisu'), xml.responseText); |
Aga kuhu ma need asjad panen? Kuhu see script käib? Kas põhilehele, mis sisaldab ajax-tabisid või ajaxiga valitud sissetulevale lehele, kus on vaja javascript toimima saada?
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
29.03.2009 01:15:15
|
|
|
Põhilehele ikka ju
Kui probleemiks on see et ajaxiga sissetulnud script tage ei evalita ja sa tahad seda funktsiooni sinna ajaxiga tuleva info sisse panna, siis tulemuseks on loogiliselt see, et seda funktsiooni ei loeta sisse ja sa ei saa seda kasutada mitte kusagil.
See võrduks taolise paradoksiga, et üritad javascripti koodis aru saada kas javascript on lubatud
See kuhu sa selle setInnerHTML väljakutsumise pead panema oleneb sellest tabide vahetamise koodist, et kuskohas seal see innerHTML=uusväärtus; tehakse. Otsi sealt see innerHTML väärtuse panemise koht ülesse ja kasuta setInnerHTML(element, html) funktsiooni selle asemel.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
30.03.2009 12:04:26
|
|
|
inzinz kirjutas: |
See kuhu sa selle setInnerHTML väljakutsumise pead panema oleneb sellest tabide vahetamise koodist, et kuskohas seal see innerHTML=uusväärtus; tehakse. Otsi sealt see innerHTML väärtuse panemise koht ülesse ja kasuta setInnerHTML(element, html) funktsiooni selle asemel. |
Kahtlane, midagi siin ikka ei klapi ju, mul on tabide jaoks selline kood põhifailis:
<ul id="tabs" class="shadetabs">
<li><a href="#" rel="#default" class="selected">link 1</a></li>
<li><a href="file1.php" rel="tcont">link 2</a></li>
<li><a href="file2.php" rel="tcont">link 3</a></li>
<li><a href="file3.php" rel="tcont">link 4</a></li>
</ul>
<div id="tcont">
esimese lingi sisu on kohe siin.
....
</div>
<script type="text/javascript">
var tt=new ddajaxtabs("tabs", "tcont")
tt.setpersist(true)
tt.setselectedClassTarget("link")
tt.init()
</script> |
Ja peafaili päises tuuakse sisse .js fail, kus on selle tabide teema tuum.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
31.03.2009 00:13:38
|
|
|
No seda .js faili peadki modima ja uurima, ega muudmoodi ei saagi ju. Seda ma üritasingi sulle öelda, et minu antud koodijuppi pead kasutama seal kohas, kus tehakse innerHTML = uusväärtus;
Antud hetkel too koht on siis seal tabide .js failis...
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
|