2012-01-26 42 views
27

khi tôi đặt thẻ img, tôi tạo thuộc tính src động. Có cách nào kiểm tra nếu src (đường dẫn mà hình ảnh được nằm) thực sự tồn tại với javascript để tránh bị:xem nếu src của img tồn tại

enter image description here

+2

bạn có thể muốn xem xét sử dụng một kịch bản phía máy chủ để kiểm tra này như các trình duyệt có thể Javascript bị vô hiệu. – rogerlsmith

+0

Xác định "thực sự tồn tại".Vì chính sách xuất xứ giữa nhiều miền, bạn sẽ không thể kiểm tra hình ảnh mà trình duyệt truy xuất từ ​​trang web từ xa bằng Javascript, vì vậy những gì bạn đang yêu cầu có thể là không thể. Bạn có thể gửi URL đến máy chủ và tải xuống tệp, nhưng đó là ý tưởng tồi từ quan điểm bảo mật. – Borealid

+0

Tôi đã tìm thấy bài đăng này. Nó sẽ giúp bạn. http://www.irt.org/script/52.htm –

Trả lời

58

Bạn có thể sử dụng các sự kiện error:

var im = document.getElementById('imageID'); // or select based on classes 
im.onerror = function(){ 
    // image not found or change src like this as default image: 

    im.src = 'new path'; 
}; 

Version Inline:

<img src="whatever" onError="this.src = 'new default path'" /> 

Hoặc

<img src="whatever" onError="doSomething();" /> 

<img> thẻ hỗ trợ các sự kiện:

  • abort (onAbort)
  • error (onerror)
  • load (onLoad)

Thông tin thêm:

+0

Tôi thấy trong các diễn đàn khác, rằng nó không hoạt động trong IE, đúng không? –

+0

@Mr: Làm việc cho tôi: http://jsbin.com/egohud – Sarfraz

+0

Phải, cảm ơn! Có lẽ các phiên bản trước đó, những người biết xD cảm ơn. –

10

bạn có thể thực hiện cuộc gọi ajax trước (với head phương pháp) và xem mã máy chủ trở lại hoặc bạn có thể sử dụng onerror sự kiện thay đổi url hoặc làm cho nó ẩn, ví dụ

<img src="notexist.jpg" onerror="this.style.visibility = 'hidden'"> 

(Tôi đã sử dụng thuộc tính inline chỉ để giải thích ý tưởng)

+0

Ví dụ tuyệt vời. Làm việc như một say mê. –

0

Bạn đang tiếp cận này một cách sai lầm.
Khi bạn tạo liên kết của mình với tập lệnh phía máy chủ, hãy kiểm tra xem liệu tệp có tồn tại hay không (bằng cách sử dụng file_exists() trong PHP chẳng hạn).

Bạn không nên dựa vào JavaScript khi bạn có thể làm điều đó ở phía máy chủ, vì JavaScript có thể được thay đổi và vô hiệu hóa.

Tự hỏi mình làm cách nào để tạo thuộc tính src= và kiểm tra xem tệp có tồn tại hay không và cung cấp giải pháp thay thế.

4

Nếu bạn tạo src động với javascript bạn có thể sử dụng này:

var obj = new Image(); 
 
    obj.src = "http://www.javatpoint.com/images/javascript/javascript_logo.png"; 
 

 
if (obj.complete) { 
 
    alert('worked'); 
 
} else { 
 
    alert('doesnt work'); 
 
}

+1

Hình ảnh tồn tại trong đường dẫn sau, nhưng nó nói 'không hoạt động' khi tôi chạy đoạn mã. Có phải vì 'chính sách nguồn gốc giống nhau' không? – yalpertem

+0

đó là vì, obj.complete return false. mã được thực hiện ngay lập tức. trong khi trạng thái chưa hoàn thành. vì vậy nó luôn đi đến khối khác –

Các vấn đề liên quan