0

私が保守している 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 が読み込まれていると推測できるようになっています。

4

2 に答える 2

0

たぶん、メソッドthis内は?create以外のものを参照しています$(".answer")か?

バックアップしてみてください、おそらくそれは役に立ちます:

var result = $(".answer").click(function() {
    var $this = $(this);
    $this.editable({
        className: "",
        saveUrl: "../api/Results/SaveResults",
        create: function() {
            var number = $this.siblings(".number").text();
            console.log(number);
            $this.editable("option", "questionNumber", number);
        }
    });
});
于 2012-10-24T09:34:47.457 に答える
0

問題は、create:関数が$(this)を別のdivでラップしていたことでした。したがって、parent()。parent()。first( "。number")はそれを解決しました。

于 2012-10-25T07:23:01.767 に答える