2012-07-02 6 views
0

Мне очень понравился совет по наилучшему способу перестроить нижеследующую функцию. То, что я делаю, это настроить считыватель файлов и обновить содержимое divs в цикле for. В принципе, мой код работает отлично до тех пор, пока я оставляю в нижнем предупреждении «alert (sparespacetofill)»; для тестирования, но когда я выхожу из этого предупреждения, содержимое моего div не обновляется, как должно. Очевидно, что проблема с функцией «reader.onload» не будет вызвана до того, как функция завершит работу, но я действительно зациклился на том, как я должен структурировать это по-другому.Проблема с размещением функции onload в jQuery

function setup_reader(file,number, sparespacetofill) { 

var name = file.name; 
var reader = new FileReader(); 

reader.onload = function(e) { 
$('#' + sparespacetofill).children('img').attr('src',e.target.result); 

if ($('#' + sparespacetofill).find("p").length <= 0 && sparespacetofill !='pic0') { 
$('#' + sparespacetofill).append('<p id="deleteit">Delete<a></p>'); 
} 

} 

reader.readAsDataURL(file); 

//alert(sparespacetofill);///ISSUE IS IN HERE IF I UNCOMMENT THIS OUT 

return sparespacetofill; 
} 
+0

Вы можете попробовать onloadend() вместо загрузки? – ustun

+0

http://www.htmlgoodies.com/beyond/javascript/read-text-files-using-the-javascript-filereader.html#fbid=4DqX_0Cz_6l, возможно, это помогает – Simon

+0

Пробовал загрузку и добавлял закрытие по ссылке, но все же нет радости? – user1495476

ответ

0

Когда пожары события загрузки, имеют операцию Ajax полностью законченную ?

Если это так, любая функциональность, которую вы пытаетесь выполнить, когда функция возвращается, вместо этого выполняет ее в конце функции onload. Вызовите функцию там, которая продолжается с любым кодом, который вы запускали.

При необходимости отрегулируйте код, чтобы его можно было разделить на две части: часть, которая выполняется до setup_reader(), и которая вызывает setup_reader(), и часть, которая запускается после срабатывания события onload.

+0

Привет, Мэтт, я сделал это с помощью функции i.e.: setup_reader (файл, i, sparespacetofill); – user1495476

+0

Не уверен, правильно ли я вас понимаю, но может оказаться неоправданным полагаться на функцию функции setup_reader, чтобы инициировать следующий шаг в коде (поскольку событие onload еще не запущено). Вместо продолжения следующего шага, когда функция вернется, продолжите работу в конце обработчика события onload, вызвав функцию там, чтобы запустить любой код, который все еще нужно запустить. –

+0

Отлично, это сделал трюк в сочетании с закрытием onload с помощью ссылки Саймонса выше. Спасибо всем парням, очень ценю это – user1495476

0

Вы можете попробовать Javascript SetTimeout() метод, как это,

setTimeout(return sparespacetofill, 3000) ; 

// Вместо этой линии

alert(sparespacetofill);///ISSUE IS IN HERE IF I UNCOMMENT THIS OUT 

return sparespacetofill; 
+0

хорошая идея, попробовал добавить это, но он все еще проходит мимо – user1495476

Смежные вопросы