Я использую JQuery для обработки всех моих форм, и все они работают нормально. Но я не могу заставить его работать с формой, находящейся внутри динамически созданного (GoogleMap-маркера) InfoWindow. Должен ли я использовать его по-другому? Может быть, с $(document).on
для захвата отправки?
Это код, чтобы поймать форму submit:
$(function() {
$('#new_marker').submit(function(e) {
e.preventDefault();
$.post($("#new_marker").attr("action"), $("#new_marker").serialize(), function(data) {
var json = myParseJSON( data );
if( json.status=="success" ) {
location.href = site_root+'map/modify_marker/'+json.marker_id;
} else {
new Messi( json.msg, {title: 'Oops...', titleClass: 'anim error', buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
}
}).fail( function() { general_error(); } );
return false;
});
});
Как я уже сказал, код такой же для всех моих других форм, но не для формы new_marker
которая находится внутри InfoWindow. Он просто загружает форму в действие, даже не признавая код JQuery.
Это код, который я использую для загрузки содержимого в InfowWindow:
function newmarker_infowindow_content(lat, long, infowindow) {
$.ajax({
url: site_root +'map/newmarker_infowindow/' + lat +'/' +long,
success: function(data){
infowindow.setContent(data);
processInLineLabels();
}
});
}
Поскольку форма недоступна при загрузке страницы... вам необходимо делегировать обработчик отправки на постоянный ресурс на странице. Ближайшим элементом будет элемент, в который вставлена карта, но также может использовать document
.
$('#MapDivID').on('submit', '#new_marker', function(e){
e.preventDefault();
/* do ajax*/
})
Подробнее о делегировании событий в jQuery on() docs
on
тех пор, как я опубликовал это. Не повезло. Я попытался сdocument
, поместив код как в моем основномsite.js
и внутри загруженного InfoWindow вдоль HTML. Ничего. Код просто игнорируется.