Иметь селектор Jquery, который работает, но не работает в $ .post - PullRequest
4 голосов
/ 05 августа 2011

У меня есть эта строка Jquery, которая находит ячейку, в которую я хотел бы ввести данные. Это работает, когда я использую ее вне моей функции $ .post (ниже), но не внутри моей $ .post

$(this).parent().parent().find(".total_item_price").html("new text");

Но когда я использую приведенную выше строку в приведенном ниже примере, это не работает. Он не обновляет текст в обязательном поле.

$.post(url, { "params": value}, function(data) {

          // This is where I am having a problem
          // also tried .text and .val
          $(this).parent().parent().find(".total_item_price").html(data.total_price_item);

          alert(data.total_price_item); // This outputs my data
       }, "JSON"); 

Я в основном хочу поместить свои возвращенные данные в ячейку таблицы. Я не думаю, что моя структура таблицы является проблемой, но я могу опубликовать ее, если это необходимо.

Я должен добавить, что мне нужно найти родителей и поле, потому что каждая функция записи будет выводиться в отдельную ячейку, так что это относительно того места, где пользователь щелкнул.

Что не так в этом коде?

Ответы [ 6 ]

8 голосов
/ 05 августа 2011

Поскольку this внутри вашего обратного вызова загрузки не равно this вне вашего обратного вызова загрузки.Они имеют разные области видимости.

Прежде чем вызывать сообщение, кэшируйте this из другой области видимости в переменную:

var scope = this;

И затем в своем обратном вызове вы можете ссылаться на другие this как scope:

$(scope).parent().parent().find(".total_item_price").html(data.total_price_item);
4 голосов
/ 05 августа 2011

($this) это не то, что вы думаете! this является всегда владельцем выполняемой функции, которая в $.post является функцией callback .

4 голосов
/ 05 августа 2011

потому что "this" в вашей функции является ссылкой на функцию, а не на узел!

4 голосов
/ 05 августа 2011

В $.post this не будет указывать на тот же элемент, о котором вы думаете. Пожалуйста, используйте фактический селектор, чтобы он работал.

2 голосов
/ 05 августа 2011

$(this) не будет работать там. Поскольку это входит в сферу функции обратного вызова, а не в событие щелчка.

Назначьте $(this) переменной за пределами сообщения (внутри обработчика события click), а затем используйте ее внутри обратного вызова после сообщения.

  var that = $(this);
  $.post(url, { "params": value}, function(data) {
      that.parent().parent().find(".total_item_price").html(data.total_price_item);
      alert(data.total_price_item); // This outputs my data
  }, "JSON"); 
2 голосов
/ 05 августа 2011

вы можете сделать это так,

  var a= $(this);
  $.post(url, { "params": value}, function(data) {

          // This is where I am having a problem
          // also tried .text and .val
          a.parent().parent().find(".total_item_price").html(data.total_price_item);

          alert(data.total_price_item); // This outputs my data
       }, "JSON"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...