0

我正在维护的网络系统有一个非常特殊的问题。在一个视图中,我想从我的 DOM 中的标签字段中获取问题编号。但是我的代码无法找到标签元素。

这是脚本部分。

$(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 函数中的数字变成了一个空字符串。使用的原因之一$(this)是因为每页不止一个问题。label.text是从方法后面的代码中设置的Page_Load()

我一直在尝试多种不同的组合;

$(this).prev().text()

$(this).parent().children(".number").text()

$(this).parent().children().find(".number").text()

等等

如果我在 chrome 控制台中尝试这些组合,即。$("#answer1").siblings().text()它完美地工作。

有没有人知道为什么会这样?所有元素都应该按照在document.ready()函数中完成的方式呈现。

提前致谢。

彼得

编辑:经过更多调查,我注意到即使我使用var number = $("questionNumber1").text();我也只是得到一个空字符串。问题是否与 DOM 未完全加载有关。脚本块位于其中,document.ready()因此人们会猜测 DOM 已加载。

4

2 回答 2

0

问题是 create: 函数将 $(this) 包装在另一个 div 中。所以, parent().parent().first(".number") 解决了它。

于 2012-10-25T07:23:01.767 回答
0

也许thisinsidecreate方法指的是除$(".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 回答