2016-10-01 7 views
0

私はGPS座標(一度)を取得し、彼/彼女と私がページに表示しているレストランのリストとの距離を計算するjavascriptを書いています。最大コールスタックが超過

$(document).bind("DOMNodeInserted", function(e) { 

    if($('#user-gps').length) { 

     $('.restaurant').each(function(index, value) { 
      var lat = $(value).find('.latitude').attr('data-src'); 
      var long = $(value).find('.longitude').attr('data-src'); 

      var distance = geolocator.calcDistance({ 
       from: { 
        latitude: $('#user-gps').attr('lat'), 
        longitude: $('#user-gps').attr('long') 
       }, 
       to: { 
        latitude: lat, 
        longitude: long 
       }, 
        formula: geolocator.DistanceFormula.HAVERSINE, 
        unitSystem: geolocator.UnitSystem.METRIC 
      }); 

      var string = Math.round(distance * 10)/10 + "km"; 
      var restaurantTitle = '#restaurant-' + index + ' .restaurant-title'; 
      //$(restaurantTitle).append(string); 
      // 
      console.log($(restaurantTitle)); 

      //console.log($(value).find('.restaurant-title').text() + " - " + Math.round(distance, -1) + "km"); 
      $(restaurantTitle).append('<span>' + string + '</span>'); 
     }); 
    } 

}); 

私は各レストランをループして距離を計算します。その後、3.2kmの値を表示するように文字列をフォーマットします。私はそれからDOMにこれを追加したいと思います。

$(restaurantTitle).append('<span>' + string + '</span>'); 

はできるだけ早く私はこれを試してみて、私は最大コールスタックはコンソールでエラーを超過取得します。

私は、現在繰り返している要素を選択していることを確認するためにいくつかの方法を試しました。私はそれぞれのレストランにユニークなIDを与えたことさえある。セレクタは正常に動作しますが、エラーが発生することなく文字列を追加することはできません。

ご迷惑をおかけして申し訳ありません。

+1

やりたいためにあなたのロジックを再考し、いくつかの他のイベントや方法を見つける必要があり**実行可能を投稿してください** [MCVE]の質問にスタックスニペット( '<>'ツールバーを使用してボタン)。これにより、人々は問題を見て解決するのを助け、必要なすべてのコンテンツがオンサイトに確実に届くようにします。 –

答えて

5

あなたはdocumentレベルでDOMNodeInsertedイベントにこれをバインドしました、そしてあなたはスパンを挿入するときに、DOMノードを挿入DOMNodeInsertedイベントをトリガ順番にスパンを挿入し、そのイベントを、トリガー、それですスタックが一杯になるまでトリガするスパンを挿入します。

あなたは

+0

私はそれが問題であることに同意しますが、コールスタック問題の原因となるのは少し混乱します。最初のハンドラでの '.append()'呼び出しによって引き起こされたイベントは、新しいイベントループで発生するべきではありませんか? – Pointy

+1

@Pointy - 私はそうは思わない、要素が挿入されるとメッセージキューがいっぱいになっているように思えますし、次のものを実行する前にチェックする時間がありません。それをクリアすることなくスタックをアップ*することができますか? – adeneo

+0

これはイベントハンドラ内でイベントをトリガするときに常に発生します - > https://jsfiddle.net/yoctn5ue/とhttps://jsfiddle.net/yoctn5ue/1/ – adeneo

関連する問題