2017-07-04 18 views
1

リーフレットマップにはモーダルを開くマーカーがあります。リーフレットマップをクリックするとモーダルが閉じ、マーカをクリックするとモーダルが開きます

ユーザーがマップをクリックすると、モーダルを閉じることができます。しかし、それは(下記)に発生するコードのビットは、それが、すぐにそれが開くと閉じるためのマーカーと相互作用し、そして力:https://jsfiddle.net/askebos/Lh1y12uq/

map.on('click', function(e) { 
$('.modal').modal('hide'); }); 

私がこの仕事-見るためにここにJSFiddleを手に入れました

しかし、あなたが見ることができるように、それは次のようなエラーが作成されるため、それが動作しているようだ唯一の理由は次のとおりです。

Uncaught TypeError: e.preventDefault is not a function.

私はmap.on('click'...)機能を実行することが防止されるからだと想像してみてください。

どのように私はエラーなしで同じ動作に得ることができますか?

答えて

0

解決策は、マーカーがクリックされたときに追跡する機能を追加することです。インスピレーションはquestionから来ました。マーカーがクリックされたときに

function init() { 
    init.called = true; 
} 

は次に、関数を呼び出します:

function markerOnClick(e) { 
    init(); 
... 
} 

は、マップをクリックすると火災の関数を作成しますが、

まず、あなたのコードにinit()機能を追加init.calledtrueに設定されているかどうかをチェックするif/elseステートメントを含めます。このような場合は、init.calledをリセットしてください。 trueに設定されていない場合は、マップが他の場所でクリックされ、モーダルが閉じることがあります。

function mapClick() { 
if(init.called) { 
    init.called = false; 
} 
else{ 
    $('.modal').modal('hide'); 
} 
} 

最後に、mapClick関数をバインドしてクリックをマッピングします。

map.on('click', mapClick); 

機能はもはやマーカークリックを無効にしませんし、エラーも同様に解決されました。それでも、なぜe.preventDefaultがエラーを引き起こしたのかわからないので、どんな説明も歓迎されるでしょう!

実際のJSFiddleは、ここにあります:https://jsfiddle.net/askebos/oesh59jr/

関連する問題