2013-06-27 4 views
0

Я попытался все решения, которые я нашел здесь, но никто не работает для меня ..Используйте переменную вне анонимной функции

var img = $("#img"); 
var width, height; 
$("<img/>") 
    .attr("src", $(img).attr("src")) 
    .load(function() { 
     width = this.width; 
     height = this.height; 
       alert(width + "*" + height) ; // works 
    }); 
alert(width + "*" + height) ; // undifined*undifined !! :(

Как вы можете видеть, что нужно использовать ширину высота & снаружи ...

Я ПОВТОРЯЮ: Я ПЫТАЛ О 6-7 РЕШЕНИЯХ ОТ StackOverFlow! Может быть, я не сделал их хорошо ... во всяком случае, они не сработали.

Что мне делать? Tnx.

+1

Решение: не используйте 'height' и' width' вне обратного вызова. Все виды использования переменных должны находиться внутри функции обратного вызова 'load', которая может не срабатывать в течение нескольких секунд. Если у вас есть код, который должен использовать 'height' и' width', поместите * all * этого кода внутри обратного вызова. Если вы не можете поместить свой код в обратный вызов, пожалуйста ** укажите больше контекста **, чтобы точно объяснить, почему вы не можете. – apsillers

ответ

1

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

var img = $("#img"); 
var dimensions = { width: 0, height: 0 }; 

$("<img/>") 
    .attr("src", $(img).attr("src")) 
    .load(function(dimensions) { 
     dimensions.width = this.width; 
     dimensions.height = this.height; 
     alert(dimensions.width + "*" + dimensions.height); 
}); 

// Some time later, after callback has definitely fired... 
alert(dimensions.width + "*" + dimensions.height); 

Но @apsillers замечаний второго предупреждение не будет работать потому что он запускается до ваша анонимная функция когда-либо вызывается. Помните, что вся функция jQuery's load() делает это определение анонимного функции в качестве аргумента и запоминания его позже. Это полностью зависит от jQuery, если и когда он когда-либо называет эту функцию.

+0

Для преимущества OP: пример «некоторое время спустя» может быть в обработчике событий, например, «клик», который должен использовать размеры. – apsillers

+0

Помог ли этот ответ? Если да, не стесняйтесь отметить это как правильно :) –