2012-06-21 4 views
2

Так что мне нужна функция, чтобы проверить, может ли изображение загружаться или нет. Вот что у меня есть:Включите функцию onError изображения в обратном направлении

function imgExists(url){ 
    var img = new Image(); 
    img.onerror = function(){ 
     alert('error') 
    } 
    img.onload = function(){ 
    alert('load') 
    } 
    img.src = url; 
} 

imgExists('http://hashtraffic.com/img/[email protected]') 

Проблема в том, что оповещения попадают в ловушку выигранных функций. Как я могу получить функцию imgExists() для возврата true, если изображение загружается и false, если это не так?

+6

Изображение будет загружаться асинхронно, так что вы не можете сразу вернуть значение из функции. Вам нужно будет следовать шаблону отложенного исполнения и либо предоставить обратный вызов для вашей функции для вызова, либо вернуть объект Отложенные. –

+0

Любые примеры? Как мне предоставить обратный вызов? – alt

+0

Вы передаете его как параметр вашей функции и вызываете его внутри функции, когда у вас есть результат. –

ответ

6

Вы должны использовать функцию обратного вызова, так как ваша функция по своей сути асинхронными:

function imgExists(url, callback) { 
    var img = new Image(); 
    img.onerror = function() { 
     callback(false); 
    } 
    img.onload = function() { 
     callback(true); 
    } 
    img.src = url; 
} 

function checkImage(exists) { 
    alert("Image exists: " + exists); // Usage example. 
} 

imgExists('http://hashtraffic.com/img/[email protected]', checkImage); 
+0

Но это предупреждение, а не возвращение. – alt

+0

@JacksonGariety: '// Пример использования .'! Код, который нуждается в результате, переходит в обратный вызов. Вместо «предупреждения» делайте все, что хотите, например, проверьте, существует ли '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' ' Вот как работают обратные вызовы. –

+0

Итак, в остальной части моего кода у меня есть 'if (imgExists ('http: // ...') == true) {// etc}' как я могу изменить это, чтобы проверить обратный вызов? – alt