Avaleht
uus teema   vasta Tarkvara »  WWW »  probla: javascript ei tööta ajax-iga lehel 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:  
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 26.03.2009 17:13:58 probla: javascript ei tööta ajax-iga lehel vasta tsitaadiga

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... icon_rolleyes.gif
Ei ole midagi undefined, kui vaadata page source'i icon_evil.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 26.03.2009 19:26:54 vasta tsitaadiga

Ja sinu test-case ?
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 26.03.2009 19:56:44 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 26.03.2009 20:02:19 vasta tsitaadiga

Kas sellele mingit lahendus on olemas? icon_rolleyes.gif
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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 26.03.2009 21:35:54 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 26.03.2009 21:44:10 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 28.03.2009 01:23:44 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 28.03.2009 13:36:44 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 29.03.2009 01:15:15 vasta tsitaadiga

Põhilehele ikka ju icon_biggrin.gif
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 icon_razz.gif

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
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 30.03.2009 12:04:26 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 31.03.2009 00:13:38 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  probla: javascript ei tööta ajax-iga lehel
[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.