2013-09-04 3 views
1

Я думаю, что у меня есть проблема синтаксиса.
Я успешно делаю вызов ajax и получаю новое значение, которое я хочу использовать в качестве значения для кнопки. Я вижу правильные данные в консоли, но значение кнопки никогда не изменяется. Вот код:элемент обновления с новым значением из ajax call failing

$('.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, он все еще знает о «этом» - нажатии кнопки?

спасибо.

+0

'.live()' устарел, какая версия jQuery у вас есть? – Sergio

+0

1.5.2 версия, в которой я запущена – dot

+0

, вы имели в виду '$ ('. Changestatus'). Value = data;'? – andrew

ответ

1

Вы должны использовать val() вместо value на объекте jquery.

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

или

document.getElementById(id).value=data; 

Вы также можете сделать так, за счет кэширования this контекст переменной self и установите значение с self.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().

+0

Первый пример должен быть '$ ('#' + id) .val (data);' –

+0

это здорово! оно работает. большое спасибо. и как только мы перейдем к 1.7, я изменюсь на использование ON – dot

0

Предполагая, что все остальное правильно, вы должны получить идентификатор так:

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

От там, вам нужно:

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

JQuery селекторы использовать хэш для обозначения того, это идентификатор, поскольку он является универсальным селектором.

+0

'var id = this.id;' тоже в порядке. – Sergio

+1

FYI 'this.id' является абсолютно допустимым и намного быстрее, чем создание объекта jQuery, чтобы получить собственный атрибут из элемента DOM. –

Смежные вопросы