XSLT en JavaScript, wat is de beste oplossing?

Pagina: 1
Acties:

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:58

alienfruit

the alien you never expected

Topicstarter
Ik heb sinds kort een XSLT template dat zelf html formulieren gegeneerd op basis van een versimpelde versie van XForms. Nu wilt de klant dat hetm ogelijk is om bepaalde velden te verbergen of juist zichtbaar te maken afhankelijk van eerder gegeven antwoorden. Nu heb ik dit inmiddels aan de praat, alleen het enigste probleem is dat dit alleen werkt bij één vraag/antwoord combinatie. Oftewel je kan niet meerdere vragen zichtbaar maken of verbergen. Nu wordt er door XSLT een regel JavaScript gegeneerd en gekoppeld aan de onchange-event van de formulier veld. Dit doe ik als volgt:

XML:
1
2
3
<xsl:attribute name="onchange">
XForm.updateFormField('<xsl:value-of select="@relevant" />', '<xsl:value-of select="xforms:extension/if:attribute[@name='value']" />', '<xsl:value-of select="@id" />');
</xsl:attribute>


Alleen dan voegt ie dus alleen updateFormField()-functie call in de onchange-event, als er meerdere velden afhankelijk zijn van de waarde van het veld waarde functie aanhangt... dan gaat het fout. Omdat het altijd de laatste functie-call pakt. Bestaat er een mogelijheid op dit op te sparen en dan op het eind pas het toe te voegen? Moet ik misschien werken met <xsl:param /> en de concat() functie?

[ Voor 27% gewijzigd door alienfruit op 04-09-2005 00:05 ]


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
Misschien is het een oplossing als je een array meegeeft aan je functie. Met javascript kan het :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<head>
<script type="text/javascript">
    function doSomething(arr) {
        for(var i=0; i<arr.length; i++) {
            alert(arr[i]);
            }
        }
</script>
</head>
<body>
<div onClick="javascript:doSomething(new Array('1', '2'));">klik mij</div>
</body>
</html>

die array kan je opbouwen door een template te maken voor je attribute element en dan apply-templates aanroepen ipv xsl:value-of (wat je nu doet)

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
ff voor de volledigheid .. als je meerdere values per 'ding' mee wilt geven kan je ook in 1 regel een geinitialiseerde array van objecten declareren.
code:
1
var myArray = new Array({id:'1', value:'een'}, {id:'12',value: 'twaalf'});

id en value zijn dan properties geworden ..

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:58

alienfruit

the alien you never expected

Topicstarter
Bedankt, ik zal eens kijken of ik het voor elkaar krijg. Momenteel kijk ik bij alle vragen of er andere vragen relevant zijn. Als dit zou is roep ik een statische template-match aan die deze attribuut injecteert. Het lijkt mij dan wel mogelijk om jou manier uit te werken. Moet waarschijnlijk alleen een nettere manier gaan zoeken :)