|
Инкапсуляция, чтение файла и event в firefox
Здравствуйте, уважаемые специалисты. Очень расчитываю на Вашу помощь и поддержку.
Вот код
topmenu = (function() {
return {
filesload: function(evt,func)
{
var reader = new FileReader();
var files = evt.target.files;
reader.onload = function(e)
{
func(e.target.result,files[0]);
}
reader.readAsArrayBuffer(files[0]);
},
replace: function(s,e)
{
this[s](event,e);
}
}
}());
Если вызвать так, то работает и в опере и хром и файрфоркс
topmenu.sub(document.getElementById("inpField"),"change",function(e)
{
topmenu.filesload(e,function(s)
{
alert(s);
});
});
А так только в хром и опере
topmenu.sub(document.getElementById("inpField"),"change",function(e)
{
topmenu.replace.call(topmenu,"filesload",function(u,f)
{
alert(u+" = "+f.name);
})
});
Файр фокс выдает event is not defined Вопрос 1) почему? и как поправить? Вопрос 2) Как я могу вернуть e.target.result, чтобы потом их обработать? Я так понимаю причина в onload. Вопрос 3) И последний вопрос касательно инкапсуляции. Какую роль играют в этом коде function(s){}(v) s и v? |
Вы, наверно, неполный код привели - у вас в topmenu нет свойства sub.
|
Цитата:
http://www.w3schools.com/jsref/jsref_sub.asp |
Цитата:
|
Цитата:
в асинхронных процессах вернуть с помощью return нельзя |
Код не полный, полный бы здесь не поместился.
Вот sub
sub: function(elem,type,block)
{
try {
try {
elem.addEventListener(type, block, false);
} catch(e) {
elem.attachEvent("on"+type, block);
}
} catch(e){}
}
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
С помощью callback так же удобно все обрабатывается в первом случае у Вас это function(s){alert(s)} здесь передавайте свою функцию обработки-в чем проблема? при этом s это будет e.target.result можно добавить второй параметр-это будет files[0] function(s,fl){} |
| Часовой пояс GMT +3, время: 02:39. |
|