【问题标题】:How to update style after ajax call in jQuery?如何在 jQuery 中调用 ajax 后更新样式?
【发布时间】:2010-11-03 01:36:50
【问题描述】:

我已经动态添加了像这样的输入字段:

<input id="person__1_badge_number" class="number" type="text" size="12" name="person[][1][badge][number]"/>

当我添加这个字段时,我调用了休闲功能:

function please_rebind() {
  $('.number').bind("change", function() {
    $.post('/registration/sell/check_badge_number', { number: $(this).val() },
    function(data) {
      $(this).addClass('make_it_red');
      alert(data);
    }, "html");
 });
}

它没有在我的输入字段中添加“make_it_red”类(我也尝试了 html('foo') 和其他东西,但它也不起作用)。我认为这是因为我在其他函数中运行 $(this) ,但我不知道如何处理它。 $(this).val() 有效,我也得到了正确的响应(警报(数据))。有人可以帮忙吗?

【问题讨论】:

    标签: jquery ajax css-selectors


    【解决方案1】:

    你可以通过id引用元素:

    $('#person__1_badge_number').addClass('make_it_red');
    

    此外,这取决于您如何动态插入元素,例如,如果您只是将其作为字符串附加到某个 div,它可能未绑定到 DOM。

    编辑:您可以从绑定中获取元素 ID,并在回调中构建选择器:

     function please_rebind() {
      $('.number').bind("change", function() {
        var elementId = this.id;
        $.post('/registration/sell/check_badge_number', { number: $(this).val() },
        function(data) {
          $('#' + elementId).addClass('make_it_red');
          alert(data);
        }, "html");
     });
    }
    

    【讨论】:

      【解决方案2】:

      我认为发生的事情是在回调之后,对 $(this) 的引用丢失了。试试这个方法:

      function please_rebind() {
        $('.number').bind("change", function() {
          var that = $(this);
          $.post('/registration/sell/check_badge_number', { number: $(this).val() },
          function(data) {
            that.addClass('make_it_red');          
          }, "html");
       });
      }
      

      【讨论】:

      • 只是想在 $.post 的回调中添加“this”是指给定 ajax 请求的选项。
      • 这是 JS 中反复出现的刺之一,“this”的易变性。只要记住在定义回调时使用这个技巧。当然,这会使函数成为一个完全闭包,这被 IE 开发人员认为是“不好的做法”。他们更愿意让 JScript 在这些情况下表现不佳。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      相关资源
      最近更新 更多