私が保守している Web システムに非常に特殊な問題があります。ビューで、DOM のラベル フィールドから質問番号を取得したいと考えています。ただし、私のコードは label 要素を見つけることができません。
これがスクリプト部分です。
$(document).ready(function () {
$(function () {
var result = $(".answer").click(function () {
$(this).editable({
className: "",
saveUrl: "../api/Results/SaveResults",
create: function () {
var number = $(this).siblings(".number").text();
console.log(number);
$(this).editable("option", "questionNumber", number);
}
});
});
});
});
そして、これがHTMLです
<div class="questionDiv">
<asp:Label ID="questionNumber1" runat="server" CssClass="number"></asp:Label>
<asp:TextBox ID="answer1" Wrap="True" runat="server" CssClass="answer" TextMode="MultiLine" Width="100%"
Rows="5" MaxLength="2000" Columns="65"></asp:TextBox>
</div>
そしてブラウザでレンダリングされます:
<span id="questionNumber1" class="number">1</span>
<textarea name="answer1" rows="5" cols="65" id="answer1" class="answer" style="width: 540px; "></textarea>
何らかの理由で、create 関数の数値が空の文字列になります。使用する理由の 1 つは、$(this)
1 ページに複数の質問があるためです。は、メソッドlabel.text
内のコード ビハインドから設定されます。Page_Load()
私はさまざまな組み合わせを試してきました。
$(this).prev().text()
$(this).parent().children(".number").text()
$(this).parent().children().find(".number").text()
等
クロムコンソールでこれらの組み合わせを試してみると、つまり. $("#answer1").siblings().text()
それは完全に機能します。
なぜこれが起こっているのか、誰にも手がかりがありますか? 関数で行われるように、すべての要素をレンダリングする必要がありますdocument.ready()
。
前もって感謝します。
ピーター
編集:さらに調査した後、使用してもvar number = $("questionNumber1").text();
空の文字列が得られることに気付きました。この問題は、DOM が完全にロードされていないことに関係している可能性があります。スクリプト ブロックはdocument.ready()
DOM が読み込まれていると推測できるようになっています。