18.08.2012, 02:16
|
Профессор
|
|
Регистрация: 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 в данном случае работает, если файл выбрать повторно, но все должно происходить сразу. Помогите, пожалуйста, разобраться.
|
|
18.08.2012, 02:34
|
без статуса
|
|
Регистрация: 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>
|
|
18.08.2012, 03:07
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
Спасибо за ответ, но мне бы хотелось реализовать так, чтобы все события можно было обрабатывать через одну функцию, как это сделано во флеймворках. И соответственно узнать причину о том, почему не работает и найти решение именно через attachevent. Кроме прочего, через attachevent я наверное могу переназначить функцию на данное событие.
|
|
18.08.2012, 03:10
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
Еще вот так работает
document.getElementById("inpField").onpropertychange = function(){}
Может какое-либо другое событие необходимо использовать в attachEvent, или в чем может быть причина?
|
|
18.08.2012, 03:26
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от platedz
|
Кроме прочего, через attachevent я наверное могу переназначить функцию на данное событие.
|
platedz,
А чем хуже в моём Варианте ? Переопределить просто функцию Onchange(Th) для данного события
*Просто к инфе для размышлений
|
|
18.08.2012, 03:40
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
Сообщение от Deff
|
platedz,
А чем хуже в моём Варианте ? Переопределить просто функцию Onchange(Th) для данного события
*Просто к инфе для размышлений
|
Как таковой вариант вполне нормальный, и для текущей цели в общем-то его пока достаточно. Хотя мне не очень ясно как в данном случае переопределить функцию. Скажем я хочу при генерации формы после выбора файла выполнить одну функцию, а во все остальные разы другую???
Вообще в этом плане мне кажется использование addEventListener и attachEvent оказывается не совсем удобно, а в данном случае и вовсе неудобно. Более логичным возможно использовать элемент[событие] = функция.
|
|
18.08.2012, 03:43
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от platedz
|
Хотя мне не очень ясно как в данном случае переопределить функцию
|
platedz,
Onchange=function (Th) {
alert('ИИ');
}
|
|
18.08.2012, 03:51
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
Сообщение от Deff
|
platedz,
Onchange=function (Th) {
alert('ИИ');
}
|
Дело в том, что я создаю несколько форм. Т.е. создаю форму, выбираю файл, выполняю функцию. Если пользователь хочет снова выбрать файл, выполняю другую функцию, действия закончились, файл обработан. форма удаляется. Пользователь хочет выбрать еще один файл. Получается функцию снова надо переопределить в первоначальное состояние. А так у меня есть не предопределенные функции которые я использую в зависимости от условий, т.е. при нажатии на кнопку когда форма создается, и при нажатии на кнопку самой формы. Могу использовать разные предопределенные функции. Наверное так, хотя я еще не пробовал и до этого не дошел.
|
|
18.08.2012, 03:55
|
без статуса
|
|
Регистрация: 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.
|
|
18.08.2012, 04:03
|
Профессор
|
|
Регистрация: 15.08.2012
Сообщений: 285
|
|
Спасибо за совет. Вообще я отказался пока от addEventListener и attachEvent. Честно говоря не очень понимаю, зачем они нужны и в чем их преимущество перед On+событие. Может мне кто-нибудь объяснит. Буду крайне признателен.
|
|
|
|