2016-09-30 12 views
-2

JQueryに私の機能の動作が少し混乱しています。実際には、is_airport関数は、その場所が空港のJSONを使用している空港かどうかを判断します。JQueryはtrueを返した後にfalseを返しますか?

JSONは正しく動作しているようです。ご覧のとおり、destination_idが空港のJSONキーにあるかどうかを検出するためのループがあります。そうです。 に「OK」と警告しますが、trueの代わりにfalseを返します。

eachの代わりにAJAXがあった場合は、非同期のためこの動作が予想されます。しかし、なぜそれがここで起こるのですか?

function is_airport(destination_id){ 
    var json_storage = $("#locations-json"); 
    var airports = JSON.parse(json_storage.attr("data-airports")); 
    $.each(airports,function(id,name){ 
     console.log(id,destination_id,name); 
     if (id==destination_id){ 
      alert('ok'); 
      return true 
     } 
    }); 
    return false 
} 

$(document).ready(function() { 
    console.log(is_airport(5));)} 

どこで問題があるのでしょうか?

+4

折り返し機能ではなく、 '$ .each'ループからtrueを返しています –

答えて

1

返信true$.eachループからは、continueとなります。代わりに、返すようにフラグを設定してください:

function is_airport(destination_id) { 
    var json_storage = $("#locations-json"); 
    var airports = JSON.parse(json_storage.attr("data-airports")); 
    var toReturn = true; // flag variable 
    $.each(airports, function(id, name) { 
    console.log(id, destination_id, name); 
    if (id == destination_id) { 
     alert('ok'); 
     return toReturn = false; // break each loop btw... 
    } 
    }); 
    return !toReturn; // return !flag 
} 
関連する問題