2016-09-14 57 views
0

長久以來,我試圖在Ajax成功函數中隱藏一個div,具體取決於它是否可見。但不明白爲什麼它不起作用。我可以設置它隱藏簡單,哪些工作,但在控制檯,當我檢查時,我發現它始終將div設置爲display:none,即使它已被隱藏。檢查一個div在ajax成功函數裏面的不可見性

JS

$(document).ready(function() { 
      $('#loading').show(); 
      setInterval(function() { 
       $.ajax({ 
        type: "GET", 
        url: "generate_list.php", 
        success: function (result) { 
         //$('#loading').hide(); 
         $('#loading:visible').hide(); 

         if(result != '') { 
          $('#empty_storage').hide(); 
          $('#file_list').html(result); 
         } 
         else { 
          $('#file_list').html(''); 
          $('#empty_storage').show(); 
         } 
        } 
       }); 
      }, 1700); 
     }); 
+2

隱藏它只是好奇,你真的需要檢查':可見'嗎? – Satpal

+1

你可以簡單地使用'.hide()'元素 – Sasikumar

+0

@Satpal,雖然不是必需的,但我可以簡單地使用hide。但是如果您檢查控制檯,它會一直將隱藏設置設置爲隱藏 – Ayan

回答

1

切換知名度

$(document).ready(function() { 
     $('#loading').css('visibility': 'visible'); 
     setInterval(function() { 
      $.ajax({ 
       type: "GET", 
       url: "generate_list.php", 
       success: function (result) { 

        if ($('#loading').css('visibility') == 'visible') { 
         $('#loading').css('visibility','hidden'); 
        } 

        if(result != '') { 
         $('#empty_storage').hide(); 
         $('#file_list').html(result); 
        } 
        else { 
         $('#file_list').html(''); 
         $('#empty_storage').show(); 
        } 
       } 
      }); 
     }, 1700); 
    }); 

CSS:最初裝載機將被隱藏

#loading { 
    visibility : hidden; 
} 

因此,與visibility屬性去,如果你要檢查的知名度。但是,如果你想使用.hide().show()那就要看顯示財產上

能見度:http://www.w3schools.com/cssref/pr_class_visibility.asp

顯示:http://www.w3schools.com/cssref/pr_class_display.asp

樣品展示:https://jsbin.com/jiluren/11/edit?html,css,js,output

希望這會有所幫助。謝謝 !

+0

看到我上面的評論。 – Ayan

+0

試過,但沒有工作。 – Ayan

+0

更新了我關於可見性的回答,還做了hide()或fadeOut()它將更改顯示屬性,但不會更改可見性。所以如果你想修改可見性,那麼我會更新我的答案等待! – KrishCdbry

0

您的問題可能是您錯位了顯示加載指示器的呼叫。在開始setInterval迭代之前,您只需撥打$('#loading').show();一次。因此,您的#loading第一次被隱藏時,它將永遠保持隱藏狀態。您應該在每個ajax這樣的電話之前致電$('#loading').show();

$(document).ready(function() { 
      setInterval(function() { 
       $('#loading').show(); 
       $.ajax({ 
        type: "GET", 
        url: "generate_list.php", 
        success: function (result) { 
         //$('#loading').hide(); 
         $('#loading:visible').hide(); 

         if(result != '') { 
          $('#empty_storage').hide(); 
          $('#file_list').html(result); 
         } 
         else { 
          $('#file_list').html(''); 
          $('#empty_storage').show(); 
         } 
        } 
       }); 
      }, 1700); 
     }); 

此外,請注意這樣一個裝載指示最好是把它藏在了always回調由$.ajax返回的承諾。這樣,當發生錯誤時,加載面板也會被隱藏,並且不會調用成功回調。我的意思是像這樣的事情。

$("#loading").show(); 
$.ajax({ ... }) 
.always(function() { 
    $("#loading").hide();  
    }); 
+0

我只需要顯示加載圖標一次,這是每次頁面加載,而不是每個Ajax調用。 – Ayan

+0

我明白了,那我其實不瞭解你的問題,對不起。 –

0

如果我理解你的要求,你需要證明AJAX調用之前加載圖標,一旦AJAX調用完成

在這種情況下,有預定義的回調函數可用的編緝

beforeSend: function (xhr) { 
    $("#loaderforsearch").show() 
    }, 

        complete: function() 
        { 
         $("#loaderforsearch").hide(); 
        }, 
相關問題