1

我想我在某个地方有语法问题。
我成功地进行了 ajax 调用并获得了我想用作按钮值的新值。我可以在控制台中看到正确的数据,但按钮的值永远不会改变。这是代码:

$('.changestatus').live('click', function()  {
    var id = this.id;
    console.log(this.id);
    var parameters = {
        rule_id: this.id,
        rule_status: this.value,
        viewtype:'json'
    };

    var url = myurl;
    console.log(myurl);
    $.getJSON(
        url,
        parameters,
        function(data) {
            console.log(data);   
            $(id).value = data; //this.value = data;
        }
    );//end getJSON.    
});//end click.     

你能告诉我哪里出错了吗?在 json 调用的上下文中,它是否仍然知道“this”——被点击的按钮?

谢谢。

4

2 回答 2

1

您应该在 jquery 对象上使用val()而不是。value

$('#' + id).val(data);

或者

document.getElementById(id).value=data;

您也可以这样做,通过将this上下文缓存到变量selfself.value=data在成功回调中设置值。

$('.changestatus').live('click', function()  {
    var id = this.id;
    var self = this; //<-- Here
    console.log(this.id);
    .....

    $.getJSON(
        url,
        parameters,
        function(data) {
            ...  
            self.value = data; 
            ...
        }
    );//end getJSON.    
});//end click.

从 jQuery 1.7 开始,不推荐使用 .live() 方法。使用 .on() 附加事件处理程序。旧版本 jQuery 的用户应该使用 .delegate() 而不是 .live()。

于 2013-09-04T19:43:49.643 回答
0

假设其他一切都是正确的,你应该得到这样的 id:

var id = $(this).attr('id');

从那里,您需要:

$('#' + id).val(data);

jQuery 选择器使用散列来表示它是一个 ID,因为它是一个通用选择器。

于 2013-09-04T19:45:21.677 回答