【问题标题】:Google Maps API infoWindow - can I submit forms from every window?Google Maps API infoWindow - 我可以从每个窗口提交表单吗?
【发布时间】:2013-01-26 09:41:01
【问题描述】:

我有一个小的谷歌地图应用程序,它使用信息窗口绘制标记。我希望能够编辑窗口中的信息并提交是否。我可以做到这一点——但只有一次。我在这里查看了Adding event to element inside Google Maps API InfoWindow,这有点帮助,但是使用我的代码提交事件似乎没有触发。

这是我的代码:

// get the data       
    $.getJSON( 'csvToJson.php', function(data) { 
      // Loop through it
      $.each( data, function(i, m) {        
        // Add the marker
        var title = m.Namn + ': ' + m.Meddelande;
        $('#map_canvas').gmap('addMarker', { 
          'position': new google.maps.LatLng(m.Lat, m.Lng), 
          'bounds':false, 
          'title': title } 
          ).click(function() {
            // Initialise the info window
            var divName = "detail" + m.id; // come back to this?
            var infoWindowContent = [
              "<form id='detail_form' action='bib.php' method='post'>",
              "Namn: <br><input type='text' name='Namn' value='" + m.Namn + "'></input>",
              "<br>Meddelande: <br>"  + m.Meddelande,
              "<br><input type='submit' value='Spara ändringar'></input></form>"
             ].join("");

            var info = new google.maps.InfoWindow({
              content: infoWindowContent
            });                    

            google.maps.event.addListener(info, 'domready', function() {
              $(document).off("submit");
              $(document).on("submit", (function() {
                console.log("Hi");
              })); // end addEvent
            }); // end addListener 
            $('#map_canvas').gmap('openInfoWindow', info, this);                 
        }); // end addMarker click(function)     
      }); // end $.each
    }); // end $.getJSON

感谢所有帮助。

迷你

【问题讨论】:

    标签: javascript jquery google-maps-api-3


    【解决方案1】:
    1. 没有 jQuery 方法 addEvent,请改用 on
    2. 在添加 domready-handler 之前打开 infoWindow,因此当您应用侦听器时,domready-event 可能已经被触发。移动线:

      $('#map_canvas').gmap('openInfoWindow', info, this); 

    ...到点击监听器的末尾

    【讨论】:

    • 感谢 Dr.Molle,似乎没有改变任何东西。但是,当 php 运行时,我在 Firebug 中注意到了这一点:'TypeError: b.split is not a function' "code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js" 第 45 行。
    • 在运行使用 jQuery 的页面时忽略 firebug 中的消息,错误消息大部分时间都是错误的。使用其他工具,例如chrome 开发者工具来获取错误的正确详细信息
    • 现在已经按照建议编辑了代码,它确实可以工作。谢谢。现在有一个新问题 - 每次我提交表单时,它都会再调用一次提交处理程序,即第一次调用一次,第二次调用两次,依此类推。发生了什么?抱歉,我是 90 年代的老 C 程序员,所以对我来说有点新,但很有趣 :)
    • 每次打开 infoWindow 时,都会向表单添加一个新的提交处理程序。在$.on() 之前使用$.off() 删除以前附加的处理程序。
    • 而不是使用.off().on() 这也可能会有所帮助:“要附加只运行一次然后自行删除的事件,请参阅.one()” - 来自the jQuery API documentation
    猜你喜欢
    • 2011-12-09
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2023-04-11
    相关资源
    最近更新 更多