Just nu i M3-nätverket
Gå till innehåll

xml/xsl och javascript


lakris-loppan

Rekommendera Poster

lakris-loppan

hjälp....

jag haller pa och gör en sida med hjälp av xml, xsl och ett litet dtd där till. Allt gar bara bra, fram till det att jag vill använda mig av ett javascript. Jag far det bar ainte att funka och undrar om det finns nagon som har en aning om hur jag (antar att det är i xsl:et som det skall in) kan lägga in det och hur jag skall anropa det? Jag har ett mouseover script som ajg skulle vilja använda, som byter bild när man för musen över en bild. Att fa fram bilden i sig är ingen problem, men att växal...dock. Som det är nu ahr jag lagt mitt javascript i head i xsl:et och ....anropat onLoad.....i body....men det verka rinte vara rätt. Nagon som har en blekaste och vill ge mig en eller annan liten knuff i rätt riktning?

/l-l

 

[inlägget ändrat 2005-05-02 21:11:08 av lakris-loppan]

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

...nej...hur def. jag javaskriptet i dtd:et...för jag antar att det är där som cdata skall in va? Har bara lagt in javaskriptet i xsl hittills. Skall man lägga in nagot i själv xml dok. ocksa?

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Pröva att göra det i XSL-filen, i HEAD precis som du gjort hittills, men med CDATA-klamrarna runt JS-stycket:

 

<script language="Javascript">
< ! [ CDATA [

function DinFunktion() {
// 
}
] ]
</script>

 

EDIT: Hm, det gick förstås inte att klistra in de taggarna, testar igen med lite mellanrum...

[inlägget ändrat 2005-05-02 22:28:18 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

ah, det skall jag testa. Men skall jag sen fran xml filen anropa funktionen...elle rhur skall jag uttrycka mig...? I ett vanligt html dok skulle jag skrivit onMouseover="bytabilder(1, bild1)" onMouseout="bytabilder(1, bild2)" i bild-taggen. Kan jag använda mig av det här ocksa?

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

I XML-filen skall du inte ha något som har med vare sig utseende eller beteende. Lägg in dina anrop i xsl-filen, ex. i OnLoad för BODY eller vilket HTML-element det nu är du vill använda det i.

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

förmodade det...att det inte skall vara naot sadant i xml-filen.

Om jag skulle skriva det i html skulle det se ut sahär:

 

[log]<script language="JavaScript">

 

<!--

 

function laddabilder()

{

if(document.images)

{

bild1=new Image();

bild1.src="bilder/bild1.jpg";

 

bild2=new Image();

bild2.src="bilder/bild2.jpg";

}

}

 

function bytabilder(imgnr, bytaUt)

{

if(document.images)

{

window.document.images[imgnr].src=bytaUt.src;

}

}

//-->

</script>[/log]

 

Ibody skulle det se ut sahär:

<body onLoad="laddabilder();">

 

och själva onmouse-gejset:

<td>

<img src="bilder/bild2.jpg" border=0 onMouseover="bytabilder(1, bild1)" onMouseout="bytabilder(1, bild2)">

</td>

 

Jah har da mest problem med hur jag skall fa med det sista, eftersom varje bild har "egna onmouse def." och jag bara def. bild en gang i mitt xsl...

 

/l-l

 

[inlägget ändrat 2005-05-02 22:45:00 av lakris-loppan]

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Ok, jag förstår problemet. Eftersom jag inte hållt på med XSL tillräckligt mkt för att veta om detta kan lösas på annat sätt så har jag en javascript-lösning som du kan använda tillsvidare. Det går ut på att du ger din IMG ett namn, i onload loopar du sen igenom alla element med detta namn och sätter ett nytt id på varje.

 

Kommer med en lösning strax förutsatt att det funkar =)

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Hm, nädu, jag får inte till det på det sättet.

 

EDIT: Fast nu när jag faktiskt tittade på vad du använde löpnumret till så lös det så här istället:

 

function bytabilder(o, bytaUt)
{
if(document.images)
{
o.src=bytaUt.src;
}
}

samt ändra anropet till:

bytabilder(this, bild1)

[inlägget ändrat 2005-05-02 23:24:51 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

Tackar sa mycket! verkligen schyrrigt att du la sa myckt möda pa mitt problem! Skall genast slänga mig över din kod snutt och se om jag kan fa det hela att funka.

Än en gang - TACK - helt klart värt poäng!

/l-l

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

Hej!

jag testade din kod och far felmeddelandet att inte bild1 är definierad....antar att felet pa nagotsätt ligge ri anropet. Jag anropar funktionen med onLoad i body, är det rätt? kan jag ha rört till det pa nagot annat sätt tro?

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Du måste deklarera bild1 och bild2 som globala variabler, eftersom du använder dem i flera funktioner. Lägg bara in följande längst upp i ditt javascript (utanför alla funktioner):

var bild1,bild2;

 

(Tack för poängen!)

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

mmm...det funkade inte....men nu är det sa att jag har 20 olika bilder, men jag tog bara med tva i exemplet till dig för att det inte skulle bli sa langt.

 

Men 1 och 2 byts ut mot varandra 3 och 4 mot varandra osv.....alla styrda av samma funktion.

 

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Ok, hoppas att kanske detta fungerar bättre. Har bytt ut dina variabler bild1, bild2 osv. mot en array istället:

 

[log]

var arrBilder=new Array;
function laddabilder() {
nAntalBilder=20;
if(document.images) {
	for (i=1;i<=nAntalBilder;i++) {
		arrBilder[i]=new Image();
		arrBilder[i].src="bilder/bild"+i+".jpg";
	}
}
}
function bytabilder(o,dn) {
if(document.images) {
	sTmp=o.src;
	n1=sTmp.lastIndexOf("/");
	n2=sTmp.lastIndexOf(".");
	nNo=parseInt(sTmp.substring(n1+5,n2));
	o.src=arrBilder[parseInt(nNo+dn)].src;
}
}

[/log]

samt ändrat anropen till:

onmouseover="bytabilder(this,1);" onmouseout="bytabilder(this,-1);"

 

Jag har förutsatt att bildfilnamnen har formen bild1.jpg, bild2.jpg osv.

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

Tack för hjälpen...var ocksa inne pa att en array kunde göra lite nytta...ser väldigt bra ut det som du skrivit. Skall testa det direkt!

Tack-tack!

/l-l

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

ihhh....nu har jag säkert snurrat till det för jag far inte det hela att funka :-( Den knorrar över kodraden : for (i=1;i<=nAntalBilder;i++)

Jag har ingen aning varöfr det inte funkar... den säger att det iar ogiltiga tecken där, men pa nagot sätt maste man ju def. index i arrayen, eller?

 

Har du eller nagon annan en eller flera checka idéer sa tas de emot med öppna armar!

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Hm, jag vet inte varför inte CDATA-blocket tillåter alla tecken i javascriptet i XSL-filen. Jag skrev om det så att loopen inte kräver <-tecknet (vad gör man?) samt ändrade lite till. Jag har nu fått en fungerande xml+xsl med mouseover. (OBS! Jag använde giffar istället för jpg i mitt exempel, så du får ändra ändelsen på det stället i js-koden)

 

http://c2.nordicplaza.com/5.xml

(xsl-filen heter http://c2.nordicplaza.com/5.xsl)

 

[inlägget ändrat 2005-05-03 20:37:54 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

10 poäng kan man inte ge va?...ett poäng och en hel rad med TACK tusen TACK! du är ju verkligen en klippa!!!! är saa tacksam :-)

/l-l

 

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

Funkar funkar funkar!!!! skit bra!!!grymt!!!!

tacksam! :-)

Tack Anjuna Moon!!!!!!!

:thumbsup:

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Anjuna Moon

Skönt att det gick att få fram något fungerande till slut, unfinished business är lika skoj som pizza utan ost =)

(Det var länge sen jag pillade med XSL, så det var lärorikt för mig med)

 

Nu blir det Sin City för 3:e gången och sen lite sova. Ha det!

[inlägget ändrat 2005-05-03 20:58:20 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

lakris-loppan

hihihi...ja pizza utan ost är ingen hit. :-)

Tjing!

/l-l

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...