1

クリックイベントで実行する関数がありますが、1回だけ実行したいのです。

クリック時に実行される関数は、ターゲット要素にプロットするグーグルマップを表します。関数は次のようになります:

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を非表示にするだけで、破棄しないため、必要なのは1回だけだからです。では、どうすればそれができますか?関数の実行時に一時変数を追加して(最初はtrueに設定し、開始時にfalseに設定して)、一時変数がtrueの場合はfalseを返しましたが、プロット関数内でfalseを返すことができなかったため、ほとんど成功しませんでした。 。

4

3 に答える 3

2

jQueryを使用し.one()ます。

http://api.jquery.com/one/

OPの説明によると、要素に対して複数のクリックイベントを定義する可能性は常にあります。

したがって、すでに行っているように一方をで定義し.one()、もう一方をで定義on()して、コードを最初に1回だけ実行するようにすることができます。

于 2012-06-21T10:12:11.893 に答える
2

次のように、クリックを1回だけバインドできます。

$(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');
    }
});
于 2012-06-21T10:13:23.407 に答える
1

2つの選択肢:

  1. 2つのイベントハンドラーを使用します。1つはで定義されone、もう1つはで定義されます。on
  2. クロージャーにカウンターを使用します。

何かのようなもの:

var counter = 0;
return $(element).on('click', function() {
    counter++;
    if ( counter > 1 ) {
    }
});
于 2012-06-21T10:18:41.330 に答える