2012-12-01 73 views
1

我試圖顯示圖像或靜態地圖圖像取決於圖像的存在。 我想將我的圖像路徑傳遞給java腳本函數,因爲路徑在我的程序中是動態的。因此,如果圖像不存在於給定路徑中,請顯示靜態Google地圖圖像。
我正在使用該代碼來做到這一點,但似乎不工作。你可以幫我嗎?javascript檢查圖像的存在

 function initialize() { 
     var img = document.getElementById("super"); 
     var mdata = $('#image_div'); 
     var mpath = mdata .data('path'); 
     img.src =mpath ; 

     img.onerror = function() { 
     document.getElementById("super").style.display = "block"; 
     alert("failed to load"); 
    } 
    img.onload = function() { 
     alert("do nothing"); 
    }; 
} 

這裏是小提琴: http://jsfiddle.net/H2gwu/2/ http://jsfiddle.net/H2gwu/3/

回答

2

固定小提琴:http://jsfiddle.net/HCC6V/

一些錯誤,我固定的:

  • mdata之後的空格
  • 您打開了一個功能塊,您從來沒有關閉
  • 你過早宣佈將src:如果圖像是在高速緩存中的CSS
  • 沒有呼叫周圍none
  • 壞的報價可能會錯過Load事件來顯示地圖,如果沒有找到
圖像

固定JS:

var img = document.getElementById("super"); 
var mdata = $('#image_div'); 
var mpath = mdata.data('path'); 
img.onload = function() { 
    alert("do nothing"); 
} 
img.onerror = function() { 
    document.getElementById("super").style.display = "block"; 
    alert("failed to load"); 
    $('#google_map').show(); 
} 
img.src =mpath ; 

在CSS:

display: none; 

代替

display: "none"; 
+0

謝謝,但我不想同時顯示。應該顯示圖像的默認值,否則地圖。你能否更新你的代碼來做到這一點? –

+0

http://jsfiddle.net/vzznA/1/ – Horen

+0

@JohnSmith請參閱編輯。但是你應該嘗試在你寫下每一行之後進行測試,直到你感覺到這一點。這是太多的小錯誤。 –

0

對於可能存在的我覺得最優雅的解決方案是期運用AJAX $,如圖片:

$.ajax({ 
    url: 'your_image.jpg', 
    type: "POST", 
    dataType: "image", 
    success: function() { 
     /* function if image exists (setting it in div or smthg.)*/ 
    }, 
    error: function(){ 
     /* function if image doesn't exist like hideing div or setting default image*/ 
    } 

});

+0

使用POST可能會產生奇怪的副作用,具體取決於您的設置。例如,如果您通過休息界面提取圖像,使用POST可以有效地清除該圖像。這是因爲POST不是冪等的,它不是「安全的」。 GET是「安全的」。 [見這裏](http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Idempotent_methods_and_web_applications)。另外,除此之外,POST不應該被緩存,所以當它是一個重複訪問的頁面時,最終會出現一個更爲嚴格的解決方案。 – Stephen