2012-03-15 43 views
0

我在使用jQuery驗證插件的Google地圖信息窗口中獲得了一個HTML表單。當它顯示錯誤消息時(我已經將它們移到了表單輸入下),表單中的div溢出了信息窗口。Google Maps API v3,在動態調整大小的信息窗口中驗證html表單

我讀過類似問題的回覆,但我沒有得到任何解決方案的解決方案。

HTML形式:

<div id="formDiv"> 
    <form action="addRow.php" method="post"id="htmlForm"> 
    <fieldset> 
     <p id="contactP"> 
      <label for="contact">Email:</label> 
      <input type="text" name="contact" id="contact"/> <br/> 
     </p> 
     <p id="dateP"> 
      <label for="datepicker">Date:</label> 
      <input type="text" name="date" id="datepicker"/> <br/> 
     </p> 
     <p id="latP"> 
      <label for="lat">Latitude:</label> 
      <input type="text" name="lat" id="lat" class="location"/> <br/>'+ 
     </p> 
     <p id="lngP"> 
      <label for="lng">Longitude:</label> 
      <input type="text" name="lng" id="lng" class="location"/> <br/> 
     </p> 
     <p id="descP"> 
      <label for="desc" id="dos">Description of Sighting:</label> <br/> 
      <textarea name="desc" id="desc"></textarea><br/> 
     </p> 

      <input type="submit" class="button" id="submitBtn" value="Post Sighting!" onclick="postSighting();"/>'+ 
     <p class="clear"></p>'+ 
    </fieldset></form></div> 

;

的jQuery:

$('#htmlForm').validate({ 
    rules: { 
     contact: {required:true, email:true}, 
     date: {required:true}, 
     lat: {required:true}, 
     lng: {required:true}, 
     desc: {required:true}, 
    }, 
    messages: { 
     desc: 'Please be descriptive!' 
    }, 
    errorPlacement: function(error, element) { 
     error.appendTo($('#' + element.attr('id') + 'P')); 
     if (element.attr('id') == 'desc') { 
      error.css({ 
       text_align: 'center', 
       color: 'red', 
       padding: 45, 
      }); 
     } else { 
      error.css({ 
       color: 'red', 
       padding: 10, 
       margin:0, 
      })}; 
    } 
}); 
+0

爲什麼標記爲google-maps-api-3? – andresf 2012-03-15 16:57:38

+0

這就是整個問題 - 它是Google地圖信息窗口中的HTML表單。信息窗口不會重新調整大小以容納包含插入的錯誤消息的div。 – Roy 2012-03-15 17:03:43

+0

鏈接到實時代碼將是非常有價值的。您的代碼與Maps API沒有任何關係。除非您提供代碼鏈接並提供更多詳細信息,否則您可能無法獲得答案。 – andresf 2012-03-15 17:06:54

回答

0

第一:你必須確保新的內容將永遠融入信息窗口(信息窗口不能比的地圖大)

問題:當驗證 - 插件修改內容,infoWindow的content_changed事件不會觸發(但這是調整infoWindow的大小所必需的)

觸發infoWindow的content_changed事件將不足以重置內容到cu infoWindow的rrent content-property(當你的插件修改內容時它沒有改變)

所以你必須在插件修改標記之後設置內容,方法是將內容設置爲infoWindow中的當前子樹。聽起來很複雜,但不是:

infowindowObject.setContent(document.getElementById('formDiv')); 

這不會有DOM的任何影響,但它會:

  1. 設置信息窗口的內容屬性的當前內容
  2. 觸發content_changed事件,因此應調整infoWindow的大小。
+0

感謝您的迴應;在validate插件完成後,我重置了infoWindow的內容,但infowindow仍然沒有重新調整大小。我在控制檯中收到以下錯誤: Uncaught TypeError:無法調用未定義的方法'setContent' 但是infoWindow變量是全局的。 – Roy 2012-03-16 11:27:46

+0

當我遵循你的小提琴http://jsfiddle.net/rhewitt/gqa6k/1/時,有一個全局的markerWindow變量,但是這個變量將不包含infoWindow,因爲你在placeMarker()中通過使用var-關鍵字,在函數內部創建一個新的markerWindow變量,它不是全局的。刪除var-keyword。 – 2012-03-16 11:42:41

+0

我沒有意識到我重新宣佈變量謝謝 - 錯誤糾正。 infowindow現在部分重新調整大小!我要玩CSS值,看看是否照顧它。 – Roy 2012-03-16 12:28:36

相關問題