Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Onchange в attachevent срабатывает не с первого раза. (https://javascript.ru/forum/css-html-internet-explorer/30846-onchange-v-attachevent-srabatyvaet-ne-s-pervogo-raza.html)

platedz 18.08.2012 02:16

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 в данном случае работает, если файл выбрать повторно, но все должно происходить сразу. Помогите, пожалуйста, разобраться.

Deff 18.08.2012 02:34

:) Так проще
<!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>

platedz 18.08.2012 03:07

Спасибо за ответ, но мне бы хотелось реализовать так, чтобы все события можно было обрабатывать через одну функцию, как это сделано во флеймворках. И соответственно узнать причину о том, почему не работает и найти решение именно через attachevent. Кроме прочего, через attachevent я наверное могу переназначить функцию на данное событие.

platedz 18.08.2012 03:10

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


Может какое-либо другое событие необходимо использовать в attachEvent, или в чем может быть причина?

Deff 18.08.2012 03:26

Цитата:

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


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

*Просто к инфе для размышлений

platedz 18.08.2012 03:40

Цитата:

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

*Просто к инфе для размышлений

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

Вообще в этом плане мне кажется использование addEventListener и attachEvent оказывается не совсем удобно, а в данном случае и вовсе неудобно. Более логичным возможно использовать элемент[событие] = функция.

Deff 18.08.2012 03:43

Цитата:

Сообщение от platedz
Хотя мне не очень ясно как в данном случае переопределить функцию

platedz,
Onchange=function (Th) { 
	    
	  alert('ИИ'); 
 
}

platedz 18.08.2012 03:51

Цитата:

Сообщение от Deff (Сообщение 198429)
platedz,
Onchange=function (Th) { 
	    
	  alert('ИИ'); 
 
}

Дело в том, что я создаю несколько форм. Т.е. создаю форму, выбираю файл, выполняю функцию. Если пользователь хочет снова выбрать файл, выполняю другую функцию, действия закончились, файл обработан. форма удаляется. Пользователь хочет выбрать еще один файл. Получается функцию снова надо переопределить в первоначальное состояние. А так у меня есть не предопределенные функции которые я использую в зависимости от условий, т.е. при нажатии на кнопку когда форма создается, и при нажатии на кнопку самой формы. Могу использовать разные предопределенные функции. Наверное так, хотя я еще не пробовал и до этого не дошел.

Deff 18.08.2012 03:55

platedz,
Цитата:

Сообщение от platedz
Получается функцию снова надо переопределить в первоначальное состояние. А так у меня есть не предопределенные функции которые я использую в зависимости от условий, т.е. при нажатии на кнопку когда форма создается, и при нажатии на кнопку самой формы. Могу использовать разные предопределенные функции.

if (FirstCreateForm){
  var Onchange = function (Th){
  
  alert('3434');
  alert(Th.value)
  }

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

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

platedz 18.08.2012 04:03

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


Часовой пояс GMT +3, время: 10:26.