返回true后,JQuery返回false?

时间:2016-09-30 10:00:58

标签: javascript jquery json

我对JQuery中的函数行为感到困惑。问题在于is_airport函数决定了该位置是否是使用JSON机场的机场。

一切似乎都正常工作,JSON被正确解析等等。正如您所看到的,有一个用于检测的循环,destination_id是否在机场JSON密钥中。它是。 提醒'确定' 但返回false而不是true

如果有AJAX而不是each函数,我会期望这种行为是因为异步。但为什么会发生在这里?

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));)}

你知道问题出在哪里吗?

1 个答案:

答案 0 :(得分: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
}