Announcement

Collapse
No announcement yet.

XSL und kleine wehwehchen mit javascript

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSL und kleine wehwehchen mit javascript

    es kommt "nicht wohlgeformt" im javascript teil genau bei "for(var i=0;i<obj.length;i++)" bei obj.length (der fehler kommt auch wenn ich nur zahlen einsetze)

    woran liegt das?

    das 2. problem ist.. das objekt was ich übergebe ist der radio button der geändert wird. aber nicht die radio button group - wie komm ich an die ran?

    ziel ist das alle elemente mit dem value der radio buttons unsichtbar werden und danach nur das sichtbar gemacht wird, welches ausgewählt wird...

    please help

    Code:
    	<xsl:template name="d1">
    		<xsl:param name="zeit" select="'08:00'"/>
    		<xsl:param name="tag" select="'1_Montag'"/>
    		<xsl:param name="lehrveranstaltung" select="'True'"/>
    		<xsl:param name="anzahl" select="count(stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1][@zeit=$zeit][@wochentag=$tag][not(.//@lehrveranstaltung=$lehrveranstaltung)])"/>
    		<xsl:if test="$anzahl&gt;=2">
    			<xsl:value-of select="concat(stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1]/@wochentag,' ',stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1]/@zeit)"/><br />
    		</xsl:if>
    		<xsl:for-each select="stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1][@zeit=$zeit][@wochentag=$tag][not(.//@lehrveranstaltung=$lehrveranstaltung)]">	
       
    		<xsl:if test="$anzahl&gt;=2">
    		  <input type="radio" onChange="radioCheck(this);">
    		  	   <xsl:attribute name="name"><xsl:value-of select="concat(stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1]/@wochentag,stundenplan_info/daten/stundenplan/veranstaltungListe/veranstaltungItem//zeit[1]/@zeit)"/></xsl:attribute>
    			   <xsl:attribute name="value"><xsl:value-of select="../../@id"/></xsl:attribute>
    			   <xsl:if test="position()=1"><xsl:attribute name="checked">checked</xsl:attribute></xsl:if>
    			   <xsl:value-of select="../../name"/><br />
    		  </input>
    		</xsl:if>
    		  <div>
    				<xsl:attribute name="id"><xsl:value-of select="../../@id"></xsl:value-of></xsl:attribute>
    				<xsl:attribute name="class"><xsl:value-of select="concat('z',substring(@zeit,1,2),substring(@zeit,4,5))"/></xsl:attribute>
    				<xsl:attribute name="style">border:solid;border-width:1px; position:absolute; left:47px;width: 157px; height:90px;background:rgb(220,230,220); padding-left:3px;</xsl:attribute>
    				<font style="font-size:10px;color:#0033FF;"><xsl:value-of select="../../dozenten/dozent[1]/name"></xsl:value-of></font><br />
    				<font style="font-size:11px;color:#0033FF;"><i><b><xsl:value-of select="../../name"/>&nbsp;-&nbsp;<xsl:value-of select="../../veranstaltungTyp"/></b></i></font><br />
    				<font style="font-size:11px;color:#000000;">
    				<xsl:value-of select="../../raeume/raum[1]/name"/><br />
    				</font>
    			</div>
    		</xsl:for-each>
    	</xsl:template>
    und im javascript teil:

    Code:
    function radioCheck(obj) {
    	for(var i=0;i<obj.length;i++){
           document.getElementById(obj[i].value).style.visibility = "hidden"
    }
    document.getElementById(obj.value).style.visibility = "visible"
    	
    	
    	
     }

  • #2
    Setze den JavaScript-Code in einen CDATA-Abschnitt:

    <script type="text/javascript">
    /*&lt;![CDATA[*/


    // JS-Code ...


    /*]]&gt;*/
    </script>


    alternativ die output-Option cdata-section-elements="script" verwenden, sofern XHTML erzeugt wird oder vorzugsweise eine extere JS-Datei einbinden:
    <script type="text/javascript" src="extern.js"></script>

    Das andere Problem erschließt sich mir noch nicht, aber die Verwendung von xsl:atttribute erzeugt schwer lesbaren Code. Verzichte darauf (offenbar unnötig!) und auch auf längst missbilligte HTML-Auszeichnungen <font style="...">...</font>. Verwende besser Absätze oder für Inline-Auszeichnungen span-Elemente.

    Vielleicht suchst Du das JS-Ansprechen von Formularelementen mittels:
    document.forms["form_name"].elements["radio_name"][index_ab_0]
    Zuletzt editiert von Thomas Meinike; 12.05.2008, 20:08.

    Comment


    • #3
      also bei der variante

      <script type="text/javascript">
      /*&lt;![CDATA[*/

      gibt er den selben fehler

      und bei der externe datei variante
      wird einfach kein js ausgeführt

      Comment


      • #4
        Code:
        for(var i=0;i<3;i++){}
        dieses stückchen geht nicht - egal welche der von dir beschriebenen varianten
        und genau das stück brauch ich

        ist das normal das xsl xml da rummault ?

        Comment


        • #5
          XSLT-Stylesheet = XML, also ist Wohlgeformtheit Voraussetzung. Dazu gehört, <-Zeichen entweder als &lt; zu schreiben oder in CDATA-Abschnitte zu verpacken. Ob der JS-Interpreter mit &lt; klar kommt, bleibt auszuprobieren. Teste ggf. mit einem statisch transformierten HTML-Dokument.

          Comment


          • #6
            danke wieder was gelernt, was i in der schule nicht mitbekommen hab

            jetzt funktionierts

            Comment


            • #7
              du meintest xsl attribute ist offenbar unnöötig bei mir

              Code:
              <input type="radio" onChange="radioCheck(this.name,this.value);">
              				   <xsl:attribute name="name"><xsl:value-of select="$radiogroup"/></xsl:attribute>
              <xsl:attribute name="value"><xsl:value-of select="../../@id"/></xsl:attribute>
              				   <xsl:value-of select="../../name"/><xsl:if test="position()!=last()"><br /></xsl:if>

              wie kann ich ein <xsl:value-of select="$radiogroup"/> einfach in die ".." eines html attributs packen?

              <input type="radio" name="<xsl:value-of select="$radiogroup"/>" geht ja schlecht


              ----
              und die nächste frage ist, warum gibt der teil folgendes im firefox zurücK:

              radiobutton: B_ZeitManag (SK) Mehlhorn

              und im iexplore7

              radiobutton: B_ZeitManag (SK)B_ZeitManag (SK) Mehlhorn

              als würde er den value automatisch dahinter schreiben.. aber warum
              Zuletzt editiert von littlesupermo; 15.05.2008, 10:04.

              Comment


              • #8
                Originally posted by littlesupermo View Post

                <input type="radio" name="<xsl:value-of select="$radiogroup"/>" geht ja schlecht
                Dafür gibt es die Attribute Value Templates, die einfach mittels {...} eigebaut werden können (xsl:attribute bietet sich dagegen bei dynamischen Namen/Inhalten an):

                <input type="radio" name="{$radiogroup}" />

                Das andere Problem erschließt sich mir gerade ohne Testcode nicht.

                Comment

                Working...
                X