【问题标题】:Jquery UI Datepicker Not Working Inside Google Map InfowindowJquery UI Datepicker在Google Map Infowindow中不起作用
【发布时间】:2016-04-01 23:09:17
【问题描述】:

当 jQuery UI Datepicker 放置在 Google Map Infowindow 中时,我遇到了问题。

我们正在构建一个包含多个目的地的行程管理器。每个目的地都有一个到达和离开日期,每个都有一个日期选择器。您可以在两个地方设置这些日期,在页面底部的“行程”div 内和 Google 地图上的 InfoWindow 内。日期选择器在行程中运行良好,但日历未显示在 Google 地图信息窗口中。

信息窗口是使用以下两种方法动态创建和更新的:

  #opens the infowindow associated with destination
  openInfowindow: (destination, map) =>
    info_content = @_generateInfowindowHTML(destination)

    if not @infowindow #infowindow not defined
      @infowindow = new google.maps.InfoWindow
        content: info_content
    else #infowindow already created
      @infowindow.setContent(info_content)

    @infowindow.open(map, destination.marker)

  #produces the HTML content for the infowindow association with destination
  _generateInfowindowHTML: (destination) =>
    iw = $('#infowindow-template').clone(true).removeClass('hidden').removeAttr('id')
    iw.find('h5').text(destination.formatted_address) #infowindow header, formatted address
    iw.find('.infowindow-content').attr('data-destination-uid', destination.uid)
    iw.find('.infowindow-content').attr('id', 'infowindow-uid-' + destination.uid)

    #Setting date pickers for destinations
    #NOTE: All datepickers need unique ids
    iw.find('.destination-arrival-date-picker').attr('id', 'infowindow-destination-arrival-datepicker-uid-' + destination.uid)
    iw.find('.destination-arrival-date-picker').datepicker
      autosize: true
      dateFormat: "M d, yy"
      onSelect: (date, input) ->
        console.log 'selected arrival date!'

    iw.find('.destination-departure-date-picker').attr('id', 'infowindow-destination-departure-datepicker-uid-' + destination.uid)
    iw.find('.destination-departure-date-picker').datepicker
      autosize: true
      dateFormat: "M d, yy"
      onSelect: (date, input) ->
        console.log 'selected departure!'


    return  iw.html()

有问题的 HTML:

<!-- Info window template -->
<div id="infowindow-template" class="hidden">
  <div class="infowindow-content" data-destination-uid="">
    <h5>Location Name</h5>
    <div class="block info-date-container link-text">
      <div class="add-destination-date">
        <i class="fa fa-calendar-plus-o"></i> <span>Add Dates</span>
      </div>
      <div class="edit-destination-date-div hidden inline-block">
        <i class="fa fa-calendar-plus-o fa-fw in-form-icon"></i>
        <%= text_field_tag '', nil, :class => 'date-picker destination-date-picker destination-arrival-date-picker',
                            :placeholder => 'Arrival Date' %>

        <i class="fa fa-calendar-plus-o fa-fw in-form-icon"></i>
        <%= text_field_tag '', nil, :class => 'date-picker destination-date-picker destination-departure-date-picker',
                            :placeholder => 'Departure Date' %>
        <i class="fa fa-check confirm-destination-dates icon--confirm"
             data-toggle="tooltip" data-placement="right" title="Confirm Dates"></i>
      </div>
      <div class="destination-date-wrapper hidden inline-block">
        <span class="destination-arrival-date"> ? </span>
        <span> to </span>
        <span class="destination-departure-date"> ? </span>
        <i class="fa fa-pencil edit-destination-date" data-toggle="tooltip" data-placement="below" title="Change Dates"></i>
      </div>
    </div> <!-- End Info Date Container -->
  </div>
</div>

到目前为止我们的调查:

  • 我们验证了每个日期选择器输入都有一个唯一的 DOM ID
  • “hasDatePicker”类被动态添加到正确的输入字段中
  • 问题不在于日期选择器隐藏在地图后面。我们知道这一点是因为 chrome 检查器说日期选择器的位置尚未设置
  • 我们在信息窗口中添加了一个测试按钮并尝试手动初始化日期选择器(例如$('#datepicker-id').datepicker()),但这不起作用。
  • 看起来所有其他类似线程中的问题是日期选择器在日期选择器进入 DOM 之前就已被初始化,但根据我的上述调查,我们认为情况并非如此。

类似的线程:

  1. Jquery date picker not working with Google Map InfoWindow
  2. https://forum.jquery.com/topic/datepicker-not-seem-to-work-inside-infowindow-from-a-google-map-v3-marker

谢谢!

【问题讨论】:

    标签: jquery-ui google-maps-api-3 datepicker coffeescript jquery-ui-datepicker


    【解决方案1】:

    _generateInfowindowHTML() 中,您必须返回 iw[0] 而不是 iw.html() 。当您返回 html 时,它只是一个字符串,您将失去已添加到元素及其子元素的所有功能。

    【讨论】:

      猜你喜欢
      • 2012-04-04
      • 1970-01-01
      • 2013-10-30
      • 2015-10-26
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      相关资源
      最近更新 更多