我想在鼠标上更改标签的值。这是我到目前为止所做的:
$(function () {
var hoverOff = "";
$("[id*=GV] td").hover(function () {
hoverOff = $("label", $(this).closest("td")).text();
$.ajax({
type: "POST",
url: "MyMethode.aspx/GetNewValue?text=" + hoverOff,
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
$("label", $(this).closest("td")).html(data.d);
}
});
},
function () {
$("label", $(this).closest("td")).html(hoverOff);
}
);});
一开始我将当前文本保存在hoverOff中并将该值发送到方法GetNewValue,它返回新值,并且在ajax成功中我想将该值应用于标签。问题是标签的文本永远不会改变,尽管data.d包含新文本。我应该使用其他东西而不是.html()吗?
答案 0 :(得分:2)
this
不是指当前悬停的TD而是指jqXHR对象。您可以使用$.ajax
上下文选项:
context: this,
$(this).closest("td")
是非常不相关的,因为很明显,即使你有嵌套的TD,$(this).closest("td")
也总会返回当前的TD,所以你可以使用this
:
hoverOff = $("label", this).text();
data: "{}",
可能是data: {},
,这里没有设置字符串的意义。 >>因为您正在将内容类型设置为JSON
答案 1 :(得分:1)
这是一个上下文问题,你不能在成功函数中使用this
,试试这段代码:
$(function () {
var hoverOff = "";
$("[id*=GV] td").hover(function () {
var label = $("label", $(this).closest("td"));
hoverOff = label.text();
$.ajax({
type: "POST",
url: "MyMethode.aspx/GetNewValue?text=" + hoverOff,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
label.html(data.d);
}
});
},
function () {
label.html(hoverOff);
}
);});
答案 2 :(得分:0)
您可以使用https://stackoverflow.com/a/10701170/3421811
中的此解决方案$('.btn').hover(
function() {
var $this = $(this); // caching $(this)
$this.data('initialText', $this.text());
$this.text("I'm replaced!");
},
function() {
var $this = $(this); // caching $(this)
$this.text($this.data('initialText'));
}
);