使用ajax在鼠标上更改标签文本

时间:2014-12-19 21:39:17

标签: javascript jquery ajax

我想在鼠标上更改标签的值。这是我到目前为止所做的:

$(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()吗?

3 个答案:

答案 0 :(得分:2)

ajax回调中的

this不是指当前悬停的TD而是指jqXHR对象。您可以使用$.ajax上下文选项:

context: this,

BTW,$(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'));
}
);