выполните функцию только один раз


У меня есть функция, которая выполняется при событии click, но дело в том, что я хочу, чтобы она выполнялась только один раз.

Функция get, выполняемая по клику, представляет собой отображение карты google на целевой элемент. Функция выглядит следующим образом:

Cluster.prototype.initiate_map_assembling = function(target, latitude, longitude) {
    var canvas = $(target).children();
    var coordinates = new google.maps.LatLng(latitude, longitude);

    var options = {
        zoom: 9,
        center: coordinates,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map($(canvas)[0], options);

    var marker = new google.maps.Marker({
        position: coordinates,
        map: map
    });
};

И я запускаю его на click событие, подобное этому:

Cluster.prototype.initiate_google_maps_action = function() {
    var self = this;
    return $(this.maps_wrapper_class).each(function(index, element) {
        var canvas = $(element).parents().eq(3).find(self.map_canvas_wrapper_class);
        return $(element).on('click', function(ev) {
            var latitude = $(element).attr('data-latitude');
            var longitude = $(element).attr('data-longitude');
            self.initiate_map_assembling(canvas, latitude, longitude);
            ($(canvas).hasClass('selected')) ? $(canvas).removeClass('selected') : $(canvas).addClass('selected');
            ev.preventDefault();
        });
    });
};

Чего я хочу добиться, так это остановить построение графика каждый раз, когда я нажимаю кнопку, потому что это нужно только один раз, так как я только скрываю контейнер div, а не уничтожить его. Так как же я мог это сделать ? Я попытался использовать временные переменные, добавляемые при выполнении функции (и устанавливая их как true после первого раза и как false при инициализации ) и возвращая false, если временная переменная является true, но с небольшим успехом, так как я не мог вернуть false внутри функции построения графика.

3   2  

3 ответа:

Используйте jQuery .one().

Http://api.jquery.com/one/

Согласно объяснению OP: всегда есть возможность определить более одного события щелчка для элемента.

Таким образом, вы можете определить один с помощью .one(), а другой с помощью on(), Как вы уже это делаете, помещая код для запуска только один раз в первом.

Вы можете привязать клик только один раз, как:

$(document).one('click', function(e) {
    //do your code here
});

Или

$('#someBtn').click(function(){    
    if ($(this).attr('data-once')!='already_clicked' ){
        //your code here
        $(this).attr('data-once', 'already_clicked');
    }
});

Два варианта:

  1. Используйте два обработчика событий: один определен с помощью one, другой с помощью on
  2. Используйте счетчик в закрытии.

Что-то вроде:

var counter = 0;
return $(element).on('click', function() {
    counter++;
    if ( counter > 1 ) {
    }
});