我对一个我正在维护的网络系统有一个非常特殊的问题。在视图中,我想从我的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函数中的数字变为空字符串。使用$(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已加载。
答案 0 :(得分: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);
}
});
});
答案 1 :(得分:0)
问题是create:function将$(this)包装在另一个div中。所以,parent()。parent()。first(“。number”)解决了它。