【问题标题】:Refresh DIV on success with jQuery使用 jQuery 成功刷新 DIV
【发布时间】:2012-12-23 12:20:36
【问题描述】:

我有一个 Rails 应用程序,在表格中显示员工的轮班。用户可以使用Best In Place gem 直接在表中编辑shiftstartshiftend

我的数据库更新工作正常,但 DIV 需要重新加载,因此显示班次持续时间的栏会根据开始和结束时间的变化进行扩展或收缩。

我想我需要一些 javascript 来执行此操作,它可能很简单,但我无法弄清楚 :)

查看

<div class="shift-data">

    <% @myShifts.where(:shiftdate => date).order(:shiftstart).each do |shift| %>

        <div id="shift_<%= shift.id %>" class="shift-item span" style="width: <%= (shift.shiftend - shift.shiftstart) / 60 / 60 / 24 * 100 %>%; left: <%= shift.shiftstart.seconds_since_midnight / 60 / 60 / 24 * 100 %>%; top: 0px;">
            <div class="hider" style="background-color: #<%= shift.type.color %>;">
                <p>
                    <i class="icon gear"></i>
                    <%= best_in_place shift, :shiftstart, :type => :input, :display_with => :format_time_bip %> - <%= shift.shiftend.strftime("%H.%M") %> <span class="tag"><%= shift.type.name.upcase %></span>
                </p>
            </div>
        </div>

    <% end %>

</div>

APPLICATION.JS

$(document).ready(function() {
  /* Activating Best In Place */
  jQuery(".best_in_place").best_in_place();
});

$(function() {
  jQuery(".best_in_place").bind("ajax:success", function() {

    /* It's here I need some help .... */

  });
});

编辑:

呈现的 HTML:

<div class="shift-data">
  <div id="shift_3" class="shift-item span" style="width: 58.333333333333336%; left: 8.333333333333332%; top: 0px;">
    <div class="hider" style="background-color: #df5c64;">
      <p>
        <i class="icon gear"></i>
        <span id="best_in_place_shift_3_shiftstart" class="best_in_place" data-original-content="2000-01-01 02:00:00 +0100" data-type="input" data-attribute="shiftstart" data-object="shift" data-url="/shifts/3">02.00</span>
        - 16.00
        <span class="tag">FERIE</span>
      </p>
    </div>
  </div>
</div>

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax best-in-place


    【解决方案1】:

    ajax 成功回调应该给你 ajax 请求的响应:

    $(function() {
      jQuery(".best_in_place").bind("ajax:success", function(data) {
        var id = $(this).data('url').split('shifts/')[1]; // Maybe you don't need this
    
        $('#shift_' + id).css({
            'left' : 'xx',
            'width': 'xx'
        });
    
      });
    });
    

    【讨论】:

    • 回调只为我提供了数据库中用于 shiftstart 的新值。我需要以某种方式刷新父 DIV,因此包含该栏的 DIV 会被刷新并显示班次的新持续时间。有道理? :)
    • 我需要刷新 id="shift_",但不知道如何定位那个特定的 DIV..
    • 如果您将呈现的 html 包含在您的问题中,事情会变得更容易。我想你想更新 div.shift-item 的 css。
    • 您的 html 中是否有多个 div.shift-item?您知道要更改的div.shift-item 的id 吗?我想你想编辑宽度。看我的回答。
    • 刚刚将 HTML 添加到问题中.. 是的,我有多个班次项目并且我知道 ID(我可以将其传递给 javascript 吗?)。它不仅改变了宽度 - 也是从左侧开始的起点,所以我认为刷新内部 DIV 容器更容易..
    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2010-10-05
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多