0

XMLフォームからデータを取得して表示するXSLTフォームがあります。クラス名を介して要素の値を取得したいのですが、未定義を返し続けます。XSLT コードのスニペットを次に示します。

<!-- generic input template -->
<xsl:template match="DataField" priority="0">
<td colspan="{DisplayOptions/@ColSpan}" location="{DisplayOptions/@Column}">
  <xsl:value-of select="FieldOptions/@DisplayName"/>
  <br/>
  <input type="{@ControlType}" name="{@Name}" onchange="textBlur(event)" />

  <xsl:apply-templates select="SubDataFields"/>
</td>

</xsl:template>

私が試した2つの方法は、jqueryとドキュメントの使用です

function textBlur(e) {
//this gives me the value and works
var personInfo = e.target.value;
var personField = e.target.name;

//these two return undefined
var elements = document.getElementsByClassName("personField");
console.log($(elements).val());

console.log($("."+personField).val());
}

ここで何が間違っていますか?personField は、必要な要素の名前です。XSLT がクラス名を生成するためです。そのため、イベントを使用して要素の名前と値を取得し、正しい名前を使用して値を取得していることを確認し、jquery と名前を使用して要素の値を再度取得しようとしました。

4

1 に答える 1

1

入力ボックスのいずれかのテキストが変更されるたびに、値を取得しようとしているようです。textBlur 関数では、「イベント」オブジェクトを渡しているため、event.target はすでに見つけたい要素です。

ただ、クラス名でやりたい場合は、inputタグにまだクラス名が設定されていないようです。これを次のように変更する必要があります。

<input class="personField" type="{@ControlType}" name="{@Name}" onchange="textBlur(event)" />

また、jQuery コードは、クラス名の固定文字列名ではなく、フィールドの name 属性の値 (つまり personField = e.target.name) を使用していました。言い換えれば、これを使いたいと思います:

console.log($(".personField").val());

お役に立てれば!

于 2013-06-25T18:41:07.917 に答える