2013-09-03 2 views
1

У меня есть несколько карт Google в один веб-страницы, как показано нижеинициализация функции один раз в JQuery

<div class="map_wrapper"> 
    <div class="map_heading"><h2>Map1</h2><a href="#" class="map_link">Map Show</a></div> 
    <div class="map_canvas">map parameters goes here</div> 
</div> 
<div class="map_wrapper"> 
    <div class="map_heading"><h2>Map1</h2><a href="#" class="map_link">Map Show</a></div> 
    <div class="map_canvas">map parameters goes here</div> 
</div> 
<div class="map_wrapper"> 
    <div class="map_heading"><h2>Map1</h2><a href="#" class="map_link">Map Show</a></div> 
    <div class="map_canvas">map parameters goes here</div> 
</div> 

Я использую Google Maps v3, а функция карта работает хорошо, у меня есть функцию maps_init();

так Я использую JQuery

таким образом

$(document).ready(function(){ 
$(".map_link").click(function(){ 
     $(this).parent().parent().children(".map_canvas").slideToggle(100); 
     var map = $(this).parent().parent().children(".map_canvas"); 
     maps_init(map); 
    }); 
}); 

, как я могу сделать это W ork, когда я нажимаю ссылку, тогда она вызывает функцию, иначе никогда не будет снова звонить на эту функцию, потому что пользователь может щелкнуть "map_link", чтобы увидеть ее несколько раз, и каждый раз, когда он инициализирует эту функцию, мне нужна ссылка в каждом div "map_wrapper", поскольку она будет проверить. если не инициализирован, тогда он будет инициализирован иначе, я не могу использовать функцию map_init() в document.ready(), потому что он инициализирует все карты и карты не выглядит правильно.

Спасибо!

+0

почему не отвязать событие щелчка на map_link после первого щелчка? – ermagana

+0

Извините, вы можете объяснить, пожалуйста, –

+0

Я неправильно понял ваш вопрос, я думал, что вы пытаетесь заставить функцию map_init вызываться только один раз на страницу, но похоже, что вы пытаетесь инициализировать ее один раз на div. извините, что – ermagana

ответ

4

Вы можете добавить класс отслеживать инициализированными карты:

$(".map_link").click(function(){ 
     if(!($(this).hasClass('initialized')) { 
      $(this).parent().parent().children(".map_canvas").slideToggle(100); 
      var map = $(this).parent().parent().children(".map_canvas"); 
      maps_init(map); 
      $(this).addClass('initialized'); 
     } 
    }); 
}); 

не может быть чистым решением, но я предполагаю, что это просто и быстро

ИЛИ

вы можете использовать JQuery-х «один», который будет срабатывать только один раз:

http://jsfiddle.net/jonigiuro/WQPjn/

$('a').one('click', function(e) { 
    alert('map initialized'); 
    e.preventDefault(); 
}); 

в вашем случае:

$(document).ready(function(){ 
$(".map_link").one('click',function(){ 
     $(this).parent().parent().children(".map_canvas").slideToggle(100); 
     var map = $(this).parent().parent().children(".map_canvas"); 
     maps_init(map); 
    }); 
}); 
+0

+1, спасибо @Jonas. Ваши оба решения работали идеально для меня. –

Смежные вопросы