Как сделать, чтобы нагрузочный ответ включал несколько условий? - PullRequest
1 голос
/ 08 августа 2010

У меня есть функция

function preloadImage() {
varLink=".... link to my picture..."
$("#picture").attr("src", varLink).one("load", function() {
 // This is called after the image is loaded
 }}

Теперь я вызываю эту функцию много раз в моем скрипте jquery.Но мне нужно, чтобы он вызывал разные функции после загрузки изображения.Есть ли более элегантный способ сделать это, вместо того, чтобы посылать параметры для функции вроде:

function preloadImage (action)

и делать несколько операторов if then после функции для замены: // Это вызывается после того, как изображение загружено в мой код?

Так что мне в основном нужно сделать несколько вещей после загрузки изображения (обратный вызов), поэтому я должен вызвать эту функцию с несколькими различными параметрами или есть какие-то другиеКстати?

Спасибо

Джерри

1 Ответ

0 голосов
/ 08 августа 2010

Вы можете передать саму функцию, например:

function preloadImage(callback) {
  varLink=".... link to my picture..."
  $("#picture").one("load", callback).attr("src", varLink);
}

Затем вы можете вызвать его, передав функцию, например

function doSomething() {
  alert("I'm loaded!, my src is: " + this.src);
}
preloadImage(doSomething);

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

//define it
function preloadImage(imageUrl, callback) {
  $("#picture").one("load", callback).attr("src", imageUrl);
}

//example call
preloadImage('myImage.jpg', function () { 
  alert("I'm loaded!, my src is: " + this.src);
});

И последнее, о чем следует помнить: вам нужно связать обработчик событий load до , задав src, чтобы он работал во всех случаях (например, из кеша), как Я выше.


Редактирование, добавление версии для комментариев:

function preloadImage(callback) {
  varLink=".... link to my picture..."
  $("#picture").one("load", function() {
    callback.apply(this, arguments);
    $('#ajax-loader').hide();
  }).attr("src", varLink);
}

Также есть альтернатива, сделайте ее простой и свяжите функцию «каждый раз» отдельно, например:

//this handler happens on all future loads
$("#picture").load(function() { $('#ajax-loader').hide(); });

//this handler runs just once for this load
function preloadImage(callback) {
  varLink=".... link to my picture..."
  $("#picture").one("load", callback).attr("src", varLink);
}
...