» »

javascript ne deluje znotraj novih DIV-ov, ki jih zgenerira Ajax

javascript ne deluje znotraj novih DIV-ov, ki jih zgenerira Ajax

xpolhecx ::

Sem novi na področju Ajaxa in ne razumem, zakaj Javascript ne deluje znotraj DIV-ov, ki jih zgenerira Ajax preko $_GET metod. Javascript dela samo na "prvi strani". Ko se zamenja vsebina nekega DIV-a, javascript tam ne deluje več. Prosim, če lahko kdo pogleda spodnjo kodo in pove, kje bi lahka bil problem.

Datoteko test.php pa si lahko pogledate tukaj

Hvala

MasterMind ::

Torej, problem imaš s kodo, ki se doda naknadno? Poskusi tisto kodo dat v eval funkcijo.

In mimogrede, poglej si prototype ;) www.prototypejs.net
Gentoo, KDE uporabnik.

xpolhecx ::

Ja, težave so s tisto kodo, ki jo dodam v DIV preko innerHTML-ja. Ravnokar mi je nekdo odgovoril, da bi mogu dat kodo v eval() pa ne vem kako to zgleda. Mi lahko daš kakšen konkreten primer? Drugače pa že grem iskat malo po googlu kaj eval() sploh je ;)

Zgodovina sprememb…

  • spremenil: xpolhecx ()

MasterMind ::

eval(koda); :) . Poskusi tako... .innerHTML = eval(responseText);

Mimogrede, update() od prototype (če prav vem) ti to naredi samodejno... Tako da ti res priporočam da si pogledaš Prototype.
Gentoo, KDE uporabnik.

xpolhecx ::

Uf.. torej dam to kodo jaz v zgornjo funkcijo function show(id) in ne tja kjer imam PHP?

if ( isset($_GET['content']) ) {
if ($_GET['content'] == '1') {
?>
vsebinaaaaa

<script type="text/javascript">
//tukaj torej ne pišem JavaScript kode?
</script>
<?php
}
}

MasterMind ::

eval je zato, da bo nova javascript koda, ki je dana naknadno v HTML, delovala. Torej to gre v tist del, ki da novo kodo v obstoječ HTML.

(enostavno povedano...)
Gentoo, KDE uporabnik.

tmz ::

Hi!

Imam podoben problem. In ta eval mi ni jasn kam naj ga postavim. Uporabljam jquery.

Torej. Da stvar poenostavim. S post metodo dobim xml iz php. Lepo izpišem na strani. Vendar mi sedaj click (najbrž pa katerikoli drug event) ne prime na tem izpisu.

Tole je izvzeto iz kode in malo poenostavljeno, samo da prikažem problem. Če mi bo to delal, potem mi bo delal tudi tisto, kar imam res napisano.


$(document).ready(function(){
fPokazi();
$("input").click(function() {
alert($("this").attr("id"));
});
});

function fPokazi() {
$.post("backend.php",{ action: "0" }, function(xml) {
fPrikaziPodatke(xml);
});
}

function fPrikaziPodatke(xml) {
$("#sedanji_vpisi").html('<input type="submit" name="delete_0" id="delete_0" class="button" value="Zbriši"/>');
}


Tisti click takoj za fPokazi(); ne prime. Upam, da se zastopi moj problem. Hvala!

tmz

frudi ::

$(document).ready(function(){ 
	fPokazi();
	$("input").click(function() {
		alert($("this").attr("id"));
	});
});

Prvo si razjasnimo ta del - ko se stran naloži (no, ne čisto, ampak dovolj dobro za ta primer), ta koda vsem 'input' elementom, ki so v tem trenutku na strani, nastavi click event.

function fPrikaziPodatke(xml) {
	$("#sedanji_vpisi").html('<input type="submit" name="delete_0" id="delete_0" class="button" value="Zbriši"/>');
}

Ta del pa v container #sedanji_vpisi doda nov 'input' element.
Zakaj torej click event na tem novem inputu ne deluje? Ja, ker je nov; ko si z $(document).ready(...) nastavil click evente, ga še ni bilo, torej še nima nastavljenega click eventa.

Razširi fPrikaziPodatke recimo tako:

function fPrikaziPodatke(xml) {
	$("#sedanji_vpisi").html('<input type="submit" name="delete_0" id="delete_0" class="button" value="Zbriši"/>');
	$("#sedanji_vpisi input[type=submit]").click( function () {
		fPokazi();
		$("input").click(function() {
			alert($("this").attr("id"));
		});
	});
}


EDIT:
Mimogrede, eval() funkcije v splošnem ni pametno uporabljati, razen če zelo dobro veš, kaj počneš in lahko zagotoviš, da bo njej podana vsebina 100% varna. Glede na to, da sprašuješ o eventih, bi ti svetoval, da eval() funkcije enostavno ne uporabljaš, dokler ne boš imel Javascripta v malem prstu.
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)

Zgodovina sprememb…

  • spremenilo: frudi ()

tmz ::

Hvala za tole.
V tej smeri, da se nekaj prej naloži kot drugo, sem razmišljal, vendar nisem vedel kako to rešit.
Sem vrgel samo tole tam kjer izpišem gumb:
$("input").click(function() {
alert($("this").attr("id"));
});
pa ni delalo.

Bi te pa prosil, da mi razložiš, zakaj si napisal dvakrat click. Najprej tole:
$("#sedanji_vpisi input[type=submit]").click( function () {

in nato v njem še tole:
$("input").click(function() {

Sem tole dal notr k meni, pa ne dela.

EDIT:
Sem sedaj poštimal, da mi deluje. Res ne vem zakaj mi ni že v prvo. Hvala.

tmz

Zgodovina sprememb…

  • spremenil: tmz ()

tmz ::

Sem imel probleme s cachem v FF in ni pokazal isto kot IE. Majke mu...

tmz

Zgodovina sprememb…

  • spremenil: tmz ()

frudi ::

Bi te pa prosil, da mi razložiš, zakaj si napisal dvakrat click. Najprej tole:
$("#sedanji_vpisi input[type=submit]").click( function () {

in nato v njem še tole:
$("input").click(function() {

Sem tole dal notr k meni, pa ne dela.

Mah, moja napaka... sem kar copy&pastal tvojo kodo, pa jo pozabil popravit... moralo bi biti:

function fPrikaziPodatke(xml) {
	$("#sedanji_vpisi").html('<input type="submit" name="delete_0" id="delete_0" class="button" value="Zbriši"/>');
	$("#sedanji_vpisi input[type=submit]").click( function () {
		fPokazi();
		alert($("this").attr("id"));
	});
}


Tako, kot sem prej napisal, bi v bistvu na ostale gumbe dodal še en event handler, takod a bi se ti potem po dvakrat izpisovali alerti. Oziroma po N-krat, če bi se ta del kode izvedel še večkrat...
1ACDoHVj3wn7N4EMpGVU4YGLR9HTfkNhTd... in case I've written something useful :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[jQuery] Zamenjava sličic pri različnih stanjih miške

Oddelek: Programiranje
111354 (1001) kornilov
»

Jquery

Oddelek: Izdelava spletišč
151634 (1358) mk818764
»

jquery in div-i (strani: 1 2 )

Oddelek: Izdelava spletišč
8710520 (9258) lisjak
»

Javascript pomoč

Oddelek: Izdelava spletišč
201976 (1532) Lion29
»

Javascript:sprememba/naložitev nove slike v DIV

Oddelek: Izdelava spletišč
142520 (2355) JayKay

Več podobnih tem