2013-06-27 15 views
0

JS代碼具有用於環路陣列檢查和JSON變量

<?php 
date_default_timezone_set('America/Los_Angeles'); 
$date = date('Gi', time()); 
?> 

<script type="text/javascript"> 
$(function() { 
    $(".show_hide").click(function() 
     { 
    var locTime = <?php echo json_encode($date) ?>; 
$.getJSON("url_to_json", function(data) { 
var isClosed = true;  
    for (var i = 0; i < data.location.monday.length || isClosed; i++) { 
    console.log("sucess1"); 
    xr_mon= data.location.monday[i]; 
    console.log("sucess2"); 
    if (locTime >= xr_mon.kai && locTime < xr_mon.guan){ 
     console.log("location is open!"); 
     isClosed = false; 
     $('.xr').show("drop", { direction: "up" }, 400); 
     } 
    else { 
     console.log("location is closed"); 
     $('.xr').hide("drop", { 
       direction: "down" 
      }, 800); 
    } 
    } 
}); 
     } 
); 
}); 
</script> 

JSON代碼

{ "location": 
{ 
    "monday": [ 
    {"kai": 700, "guan": 1400}, 
    {"kai": 1700, "guan": 2100} 

    ] 
} 
} 

有麻煩一個數之後嘗試與此環序列。

即使isClosed滿足條件,我仍然不知道它爲什麼仍在循環。我錯過了我的代碼中的任何內容?

找到我的答案。

<?php 
date_default_timezone_set('America/Los_Angeles'); 
$date = date('Gi', time()); 
?> 

<script type="text/javascript"> 
$(function() { 
    $(".show_hide").click(function() 
    { 
var locTime = <?php echo json_encode($date) ?>; 
$.getJSON("url_to_json", function(data) { 

for (var i = 0; i < data.location.monday.length; i++) { 
console.log("sucess1"); 
xr_mon= data.location.monday[i]; 
console.log("sucess2"); 
if (locTime >= xr_mon.kai && locTime < xr_mon.guan){ 
    console.log("location is open!"); 

    $('.xr').show("drop", { direction: "up" }, 400); 
    Break; 
    } 
else { 
    console.log("location is closed"); 
    $('.xr').hide("drop", { 
      direction: "down" 
     }, 800); 
} 
} 
}); 
    } 
); 
}); 
</script> 
+0

有什麼關於這是錯的? http://jsfiddle.net/a22CW/ –

+0

我希望位置div(.xr)在開放時間內保持打開狀態。但這個腳本只會跳過第一個IF,並且總是將ELSE的結果返回給我。 – user2510532

回答

0

如果我理解你的權利,(編輯:做的是改變都可以),你可以嘗試使用「& &」而不是「||」在循環條件?

for (var i = 0; i < data.location.monday.length && isClosed; i++) 

EDIT2: 因爲當它是1800年,循環會先檢查:{ 「開」:700, 「關」:1400}和條件將不會返回true,因爲1800是沒有在700和1400 第二次嘗試{「kai」:1700,「guan」:2100}條件將返回true,因爲1800在1700和2100之間。 所以我建議編輯你的腳本this way。 你想完成什麼?

var isClosed = true;  
    xr_mon= data.location.monday[0]; 
    xr_mon2= data.location.monday[1]; 
    if ((locTime >= xr_mon.kai && locTime < xr_mon.guan) || (locTime >= xr_mon2.kai && locTime < xr_mon2.guan)){ 
     console.log("location is open!"); 
     isClosed = false; 
     $('.xr').show("drop", { direction: "up" }, 400); 
     } 
    else { 
     console.log("location is closed"); 
     $('.xr').hide("drop", {direction: "down"}, 800); 
    } 
+0

我希望打開和關閉之間的小時數不是OR。 – user2510532

+0

@ user2510532我正在寫一個循環,而不是「if」條件。澄清:當locTime在打開和關閉之間時,你想結束一個循環嗎? –

+0

我自己找到解決方案 – user2510532