在keyup上单独绑定每个元素的时间差

时间:2016-04-18 23:15:40

标签: jquery momentjs jsfiddle

结果

感谢你们(@timmyRS和@LTasty)提供帮助。

enter image description here

我正在创建一系列在航班起飞前发生的运输皮卡。

  1. 航班起飞时间
  2. 分钟:在Flight Departs
  3. 之前发生取件的分钟数
  4. 取件时间=出发时间 - 分钟
  5. 出发时间仍然存在,用于根据之前的分钟数指示接送时间。

    我的出发点是;

    <label>Flight Departs</label>
    <input type="text" class="tour-time" value="10 AM" />
    <hr />
    <div class="pickups">
      <div><label>Pickup Time <span class="pickup-time"></span></label>
        <input type="text" class="pickup-minutes" placeholder="number of minutes before flight departs" />
      </div>
    </div>
    <a href="#" class="add-pickup">Add Pickup</a>
    

    添加取件链接通过附加添加额外的取件时间。

    我的问题

    我想为每个添加的取件点单独更新取件时间。

    我有正确计算的时间,但它们都一起更新。正如您在下面的屏幕截图中看到的那样。第一个接送时间是正确的(在上午10点之前20分钟=上午9点40分),但它也会改变第二个接送时间,应该是上午9:30。

    Pickups

    请参阅FIDDLE

    谢谢。

2 个答案:

答案 0 :(得分:1)

您的错误很容易被发现,因为您实际上只是从第一个.pickup-minutes元素计算并将其放入每个.pickup-time元素中。使用简单的each函数解决了我的问题:

$(document).on('keyup', '.tour-time, .pickup-minutes', function()
{
    $(".pickups").children().each(function()
    {
        console.log(this);
        var tourtime = $('.tour-time').val();
        var minutes = $(this).find('.pickup-minutes').val();
        ctime = moment(tourtime, 'h:mm A').subtract(minutes, 'minutes').format('h:mm A');
        $(this).find('.pickup-time').html(ctime);
     });
});

另外:我将减法方法更改为substract(minutes, 'minutes'),因为旧方法已弃用。

答案 1 :(得分:1)

我拆分处理程序,因为当你改变小时数时,你需要每个输入都存在

@app.route('/')
def start():

https://jsfiddle.net/u5hL9Lar/29/