Javascript.RU

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

Onchange в attachevent срабатывает не с первого раза.
Вот собственно код
document.getElementById("apslaed").attachEvent("onclick",function()
			{
			
				var newElem = document.createElement("div");
				newElem.id = "sizeslide";
				newElem.innerHTML = "<form id=\"fileload\" action=\"#\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\"  name=\"anyfile\" id=\"inpField\"/></form>";
				document.body.insertBefore(newElem, document.body.firstChild);
				document.getElementById("inpField").click();
				document.getElementById("inpField").attachEvent("onchange", function(){alert("34343");});
});

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

Так проще
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

</head>
<body>


<div id="apslaed">Клик</div>
<script type="text/javascript">
function Onchange(Th){
  
  alert('3434');
  alert(Th.value)
}
document.getElementById("apslaed").attachEvent("onclick",function()
			{
			
				var newElem = document.createElement("div");

				newElem.id = "sizeslide";
				newElem.innerHTML = "<form id=\"fileload\" action=\"#\" method=\"post\" enctype=\"multipart/form-data\"><input type=\"file\"  name=\"anyfile\" id=\"inpField\" onchange=\"Onchange(this)\"/></form>";
				document.body.insertBefore(newElem, document.body.firstChild);
				
});

</script>



</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 18.08.2012, 03:07
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Спасибо за ответ, но мне бы хотелось реализовать так, чтобы все события можно было обрабатывать через одну функцию, как это сделано во флеймворках. И соответственно узнать причину о том, почему не работает и найти решение именно через attachevent. Кроме прочего, через attachevent я наверное могу переназначить функцию на данное событие.
Ответить с цитированием
  #4 (permalink)  
Старый 18.08.2012, 03:10
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Еще вот так работает
document.getElementById("inpField").onpropertychange = function(){}


Может какое-либо другое событие необходимо использовать в attachEvent, или в чем может быть причина?
Ответить с цитированием
  #5 (permalink)  
Старый 18.08.2012, 03:26
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от platedz
Кроме прочего, через attachevent я наверное могу переназначить функцию на данное событие.

platedz,
А чем хуже в моём Варианте ? Переопределить просто функцию Onchange(Th) для данного события

*Просто к инфе для размышлений
Ответить с цитированием
  #6 (permalink)  
Старый 18.08.2012, 03:40
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Сообщение от Deff Посмотреть сообщение
platedz,
А чем хуже в моём Варианте ? Переопределить просто функцию Onchange(Th) для данного события

*Просто к инфе для размышлений
Как таковой вариант вполне нормальный, и для текущей цели в общем-то его пока достаточно. Хотя мне не очень ясно как в данном случае переопределить функцию. Скажем я хочу при генерации формы после выбора файла выполнить одну функцию, а во все остальные разы другую???

Вообще в этом плане мне кажется использование addEventListener и attachEvent оказывается не совсем удобно, а в данном случае и вовсе неудобно. Более логичным возможно использовать элемент[событие] = функция.
Ответить с цитированием
  #7 (permalink)  
Старый 18.08.2012, 03:43
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от platedz
Хотя мне не очень ясно как в данном случае переопределить функцию
platedz,
Onchange=function (Th) { 
	    
	  alert('ИИ'); 
 
}
Ответить с цитированием
  #8 (permalink)  
Старый 18.08.2012, 03:51
Профессор
Отправить личное сообщение для platedz Посмотреть профиль Найти все сообщения от platedz
 
Регистрация: 15.08.2012
Сообщений: 285

Сообщение от Deff Посмотреть сообщение
platedz,
Onchange=function (Th) { 
	    
	  alert('ИИ'); 
 
}
Дело в том, что я создаю несколько форм. Т.е. создаю форму, выбираю файл, выполняю функцию. Если пользователь хочет снова выбрать файл, выполняю другую функцию, действия закончились, файл обработан. форма удаляется. Пользователь хочет выбрать еще один файл. Получается функцию снова надо переопределить в первоначальное состояние. А так у меня есть не предопределенные функции которые я использую в зависимости от условий, т.е. при нажатии на кнопку когда форма создается, и при нажатии на кнопку самой формы. Могу использовать разные предопределенные функции. Наверное так, хотя я еще не пробовал и до этого не дошел.
Ответить с цитированием
  #9 (permalink)  
Старый 18.08.2012, 03:55
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

platedz,
Сообщение от platedz
Получается функцию снова надо переопределить в первоначальное состояние. А так у меня есть не предопределенные функции которые я использую в зависимости от условий, т.е. при нажатии на кнопку когда форма создается, и при нажатии на кнопку самой формы. Могу использовать разные предопределенные функции.
if (FirstCreateForm){
  var Onchange = function (Th){
  
  alert('3434');
  alert(Th.value)
  }

} else {
  var Onchange=function (Th) { 
	    
	  alert('ИИ'); 
 
  }
}

Ну или вообще массив по ключу формы

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

Спасибо за совет. Вообще я отказался пока от addEventListener и attachEvent. Честно говоря не очень понимаю, зачем они нужны и в чем их преимущество перед On+событие. Может мне кто-нибудь объяснит. Буду крайне признателен.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В 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