Stefan: Problem mit XSL/XML und JavaScript Methode

Hallo, ich hoffe ihr könnt mir bei folgendem Problem helfen. Ich habe auf einer XSL-Seite ein Dropdown-Menü mit Bezeichnungen. Daneben ein Input-Field mit der ID der Bezeichnung. Wenn ich nun im DropDown eine andere Bezeichnung auswähle, soll der Wert im Input-Field entsprechend aktualisiert werden. Genauso kann ich im Input-Field einen Wert eintragen und das DropDown-Feld wird entsprechend aktualisiert. Dazu gibt es jeweils eine onChange-Methode. Leider funktioniert das so nicht. Vielleicht habt ihr eine Idee wo der Fehler liegt. Hier der entsprechende Auszug aus der XSL-Datei dann die JavaScript-Methoden:

<td>
	<xsl:element name="select">
		<xsl:attribute name="name">form_position<xsl:value-of select="@row"/>_BezeichnungLangSel</xsl:attribute>
		<xsl:attribute name="class">check-selectbox</xsl:attribute>
		<xsl:attribute name="onchange">getSelectedBezeichnungLang('form_position<xsl:value-of select="@row"/>_BezeichnungLang');</xsl:attribute>
		<xsl:for-each select="bezeichnungBox/type">
			<xsl:element name="option">
				<xsl:attribute name="value"><xsl:value-of select="@id"/></xsl:attribute>
				<xsl:if test="@selected='1'">
					<xsl:attribute name="selected"/>
				</xsl:if>
				<xsl:value-of select="@name"/>
			</xsl:element>
		</xsl:for-each>
	</xsl:element>
</td>
<td>
	<xsl:element name="input">
		<xsl:attribute name="type">text</xsl:attribute>
		<xsl:attribute name="name">form_position<xsl:value-of select="@row"/>_Bezeichnung</xsl:attribute>
		<xsl:attribute name="size">10</xsl:attribute>
		<xsl:attribute name="maxlength">10</xsl:attribute>
		<xsl:attribute name="onchange">setSelectedBezeichnung('form_position<xsl:value-of select="@row"/>_Bezeichnung');</xsl:attribute>
		<xsl:attribute name="value"><xsl:value-of select="@Bezeichnung"/></xsl:attribute>
	</xsl:element>
</td>
function getSelectedBezeichnungLang(selBox)
{
	var box = eval("document.formInput." + selBox + "Sel");
	var target = eval("document.formInput." + selBox);
	if( box[box.selectedIndex].value == "?" )
	{
		target.value =  "";
	}
	else
	{
		target.value =  box[box.selectedIndex].value;
	}
}

function setSelectedBezeichnung(selBox)
{
	var box = eval("document.formInput." + selBox + "Sel");
	var theinput= eval("document.formInput." + selBox);
	var theEmptyValue = 0;
	var found = false;

	for (i=0; box.length>i; i++)
	{
		if (box[i].value == "?")
		{
			theEmptyValue = i;
		}
		if (Number(box[i].value) ==Number(theinput.value))
		{
			box[i].selected = true;
			found = true;
		}
		else
		{
			box[i].selected = false;
		}
	}
	if (found ==false)
	{
		box[theEmptyValue].selected = true;
	}
}
  1. Moin!

    Dein Problem betrifft offensichtlich nur das entstehende HTML und Javascript. Bitte präsentiere das hier auch so, das erhöht auch Deine Chancen auf eine Antwort. Deine Codestücke kann man weder durch einen "Prozessor" jagen noch debuggen. Selbst diejenigen, die das im Kopf können, haben wohl kaum Lust sich mit XML/XSL das Hirn wegzuschießen bevor sie dem eigentlichen Problem auf den Grund gehen können.

    Jörg Reinholz

  2. Hallo Stefan,

    Leider funktioniert das so nicht. Vielleicht habt ihr eine Idee wo der Fehler liegt.

    Wie schon gesagt, wäre das XML dazu bzw. das generierte HTML interessant, um das JS-Problem zu finden.

    Ansonsten nur als Tipp eine aufgeräumtere Schreibweise des XSLT-Codes:

    <td>
      <select name="form_position{@row}_BezeichnungLangSel" class="check-selectbox"
        onchange="getSelectedBezeichnungLang('form_position{@row}_BezeichnungLang');">
        <xsl:for-each select="bezeichnungBox/type">
          <option value="{@id}">
            <xsl:if test="@selected='1'">
              <xsl:attribute name="selected"/>
              <!-- Hier mal <xsl:attribute name="selected">selected</xsl:attribute> probieren. -->
            </xsl:if>
            <xsl:value-of select="@name"/>
          </option>
        </xsl:for-each>
      </select>
    </td>
    <td>
      <input type="text" name="form_position{@row}_Bezeichnung" size="10" maxlength="10"
        value="{@Bezeichnung}"
        onchange="setSelectedBezeichnung('form_position{@row}_Bezeichnung');"/>
    </td>
    

    Grüße, Thomas