Javascript.RU

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

В общем и целом все оказалось не так просто.

При попытке заменить этот код
topmenu = (function(window) {
return {
			sub: function(elem,type,block) 
				{
				
			


						try { 
								try {

									elem.addEventListener(type, block, false);

								} catch(e) {

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

								}
							} catch(e){}



				}
	}

}(window));


на

topmenu = (function(window) {
return {
			sub: function(elem,type,block) 
				{
					elem["on"+type] = block;

				}
	}

}(window));

elem is undefined

Соответственно вопрос. Почему? И как можно решить эту проблему?

Также остался вопрос по поводу change в attachevent. Очень надеюсь на Ваши знания и опыт уважаемые специалисты.
Ответить с цитированием
  #12 (permalink)  
Старый 18.08.2012, 12:42
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platedz,
<script>
topmenu = (function(window) {
return {
			sub: function(elem,type,block) 
				{
				
                        elem["on"+type] = block;

				}
	}

}(window));

alert(topmenu.sub.toString())

</script>



<script>
topmenu = (function(window) {
return {
			sub: function(elem,type,block) 
				{


			elem["on"+type] = block	
                        alert('elem[on'+type+']='+elem["on"+type])

				}
	}

}(window));
New_elem=[]
topmenu.sub(New_elem,2,3)

</script>


elem, вводимый в функцию - должен быть заранее определён как массив (или определяйте внутри функции

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

Спасибо за ответ. Честно говоря я не очень понял, при чем здесь массив. Вы наверное не верно поняли код. В вашем коде получается, что дожна произойти функция 3, при наступлении события 2, на элементе New_elem.

Вообще проблема была в том, что я возвращал через функцию элемент, что в общем то и должно было вызывать ошибку, учитывая, что элемент отсутствовал. Странно, что когда я не возвращал элемент, а исполнял на него функцию ошибки не происходило.
Ответить с цитированием
  #14 (permalink)  
Старый 18.08.2012, 23:29
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от platedz
Честно говоря я не очень понял, при чем здесь массив.
Внутри функции вы работаете с elem как с массивом или объектом
elem["on"+type]

Это где-то должно быть определено! (или в глобале или внутри функции
Ответить с цитированием
  #15 (permalink)  
Старый 19.08.2012, 00:41
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от platedz
Вообще я отказался пока от addEventListener и attachEvent. Честно говоря не очень понимаю, зачем они нужны и в чем их преимущество перед On+событие. Может мне кто-нибудь объяснит. Буду крайне признателен.
addEventListener позволяет на одно событие вешать несколько обработчиков а elem.onclick=func-только один обработчик
если это не существенно то разницы нет
Ответить с цитированием
  #16 (permalink)  
Старый 19.08.2012, 01:49
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо. В этом случае решил все-таки пока оставить addEventListener.
Жаль, что так и не удалось решить проблему с change в нем.
Может кто-нибудь все-таки подскажет ответ.
Ответить с цитированием
  #17 (permalink)  
Старый 19.08.2012, 01:56
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Сообщение от Deff Посмотреть сообщение
Внутри функции вы работаете с elem как с массивом или объектом
elem["on"+type]

Это где-то должно быть определено! (или в глобале или внутри функции
Извините, может я что-то недопонимаю.
elem["on"+type]
это тоже самое что и
document.getElementById("id")["onclick"]
Т.е. это способ обратиться к объекту.
Насколько я понимаю, свойство onclick может быть только у объекта, а не у массива.
При этом сам по себе объект уже определен как объект, наверное.

Последний раз редактировалось platedz, 19.08.2012 в 02:03.
Ответить с цитированием
  #18 (permalink)  
Старый 19.08.2012, 08:34
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от platedz Посмотреть сообщение
Спасибо. В этом случае решил все-таки пока оставить addEventListener.
Жаль, что так и не удалось решить проблему с change в нем.
Может кто-нибудь все-таки подскажет ответ.
Попробуйте переставьте строки
document.getElementById("inpField").click();
document.getElementById("inpField").attachEvent(...

местами-сначала назначаем обработчик-потом кликаем
хотя если заменить на addEventListener-в хроме работает с первого раза и так
Если не будет работать-то возможно проблема в безопасности-они считают что юзер сам должен кликнуть на кнопку-а не програмно это делать
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В IE6 не сразу срабатывает onchange Metallic Events/DOM/Window 3 26.03.2012 14:54
Функция срабатывает два раза, а должна - один pevec1 Элементы интерфейса 1 03.03.2012 04:29
click срабатывает со второго раза jsuse jQuery 2 03.12.2011 03:44
Не возвращает значение с первого раза document.getElementById().style.top 2dkott Общие вопросы Javascript 3 08.09.2009 18:29
Помогите новичку - onChange() не срабатывает serp Общие вопросы Javascript 2 01.08.2008 14:47