Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.08.2012, 22:35
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Инкапсуляция, чтение файла и 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?
Ответить с цитированием
  #2 (permalink)  
Старый 16.08.2012, 23:08
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Вы, наверно, неполный код привели - у вас в topmenu нет свойства sub.
Ответить с цитированием
  #3 (permalink)  
Старый 16.08.2012, 23:12
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от oneguy Посмотреть сообщение
Вы, наверно, неполный код привели - у вас в topmenu нет свойства sub.
sub это редко встречающейся метод
http://www.w3schools.com/jsref/jsref_sub.asp
Ответить с цитированием
  #4 (permalink)  
Старый 16.08.2012, 23:19
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от vadim5june Посмотреть сообщение
sub это редко встречающейся метод
http://www.w3schools.com/jsref/jsref_sub.asp
Да, но вы невнимательно посмотрели код. В Object.prototype нет метода sub.
Ответить с цитированием
  #5 (permalink)  
Старый 16.08.2012, 23:19
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от platedz
Как я могу вернуть e.target.result, чтобы потом их обработать
Вы же передаете свой callback в нем и обрабатывайте или передайте в другую функцию
в асинхронных процессах вернуть с помощью return нельзя

Последний раз редактировалось vadim5june, 16.08.2012 в 23:24.
Ответить с цитированием
  #6 (permalink)  
Старый 16.08.2012, 23:20
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Код не полный, полный бы здесь не поместился.
Вот sub
sub: function(elem,type,block) 
				{
						try { 
								try {

									elem.addEventListener(type, block, false);

								} catch(e) {

									elem.attachEvent("on"+type, block);

								}
							} catch(e){}



				}
Ответить с цитированием
  #7 (permalink)  
Старый 16.08.2012, 23:23
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от oneguy Посмотреть сообщение
Да, но вы невнимательно посмотрели код. В Object.prototype нет метода sub.
извиняюсь это метод String
Ответить с цитированием
  #8 (permalink)  
Старый 16.08.2012, 23:25
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Сообщение от vadim5june Посмотреть сообщение
Вы же передаете свой callback в нем и обраьатывайте или передайте в другую функцию
в асинхронных процессах вернуть с помощью return нельзя
Может быть есть способ сделать данный процесс синхронным?
Ответить с цитированием
  #9 (permalink)  
Старый 16.08.2012, 23:34
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от platedz Посмотреть сообщение
Может быть есть способ сделать данный процесс синхронным?
Вы ведь повесили обработчик на onchange. Он по идее должен срабатывать при изменении пользователем значения файлового поля, поэтому он как раз должен быть асинхронным.
Сообщение от platedz
Вопрос 1) почему? и как поправить?
В Фаерфоксе, возможно, не срабатывает потому, что вы использовали глобальную переменную event, а нужно брать событие, как аргумент в обработчике?
Сообщение от platedz
Вопрос 3) И последний вопрос касательно инкапсуляции. Какую роль играют в этом коде function(s){}(v) s и v?
У вас в коде ведь использован такой шаблон, без параментров: function(){}()

Последний раз редактировалось oneguy, 16.08.2012 в 23:47.
Ответить с цитированием
  #10 (permalink)  
Старый 16.08.2012, 23:35
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от platedz Посмотреть сообщение
Может быть есть способ сделать данный процесс синхронным?
Это мы сделать не в состоянии
С помощью callback так же удобно все обрабатывается
в первом случае у Вас это function(s){alert(s)}
здесь передавайте свою функцию обработки-в чем проблема?
при этом s это будет e.target.result
можно добавить второй параметр-это будет files[0]
function(s,fl){}

Последний раз редактировалось vadim5june, 16.08.2012 в 23:43.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из тектового файла Jackky Общие вопросы Javascript 14 30.06.2012 01:00
Чтение и запись файла kilogram Серверные языки и технологии 0 16.05.2012 23:59
Чтение и запись с txt или csv файла vitaver AJAX и COMET 0 23.12.2010 20:43
Чтение файла средствами javascript DVVID Общие вопросы Javascript 4 05.04.2010 15:00
чтение из случайного файла lesik Общие вопросы Javascript 7 07.07.2008 17:24