Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Событие onchange и автоматическое сохранение


Автор: Экскалупатор 30.8.2011, 09:44
всем привет. у меня на странице есть <input type="text" onchange="hendler()"/>. после введения пользователем каких то данных они должны отправиться на сервер, что и происходит в обработчике события. но, событие onchange происходит только после потери фокуса элементом, т.е. для того что бы событие произошло пользователю нужно кликнуть в любое место страницы. и вот тут косяк, а именно, если пользователь что то ввел и кликнул в кнопку/ссылку, то отрабатывает событие onchange, данные отправляются на сервер, но после этого не происходит обработка события клика по элементу кнопка/ссылка, т.е. пользователь к примеру должен перейти на другую страницу, но вместо этого происходит сохранение и пользователь остается там где был. как быть? при этом такая проблема наблюдается только в ie8 и как ни странно в FF6(в других версиях происходит и сохранение и переход). 
Кто нибудь сталкивался с таким? как это можно побороть?

Автор: Экскалупатор 30.8.2011, 22:57
неужели никаких идей нет ни у кого? очень надо, может "костыль" какой предложите...

Автор: нуп 30.8.2011, 23:06
keyup?

Автор: Экскалупатор 30.8.2011, 23:16
нуп, а как получать содержимое из текстбокса что бы сохранить его один раз? т.е. как узнать что пользователь закончил ввод данных? сохраняться каждый keyup нельзя(много трафика и пр.)

Автор: нуп 30.8.2011, 23:23
Понятия не имею  smile  В голове только один вариант : после события keypress создавать таймаут например в секунду, чтобы он вызывал вашу функцию. 
Код

function onChange() {
// получили данные, отправили
}
function myFunc() { 
    if(onChange.timeout)
         clearTimeout(onChange.timeout);
    onChange.timeout = setTimeout(onChnage, 1500); // 1.5 sec
}


Код

<input type="text" id="blabla" onkeyup="myFunc();"/>

Автор: Экскалупатор 30.8.2011, 23:45
не совсем понимаю как тут поможет таймаут, если человек будет вводить текст к примеру минуту(ну там пока подумает, пока кнопки найдет нужные и пр.)) то он может нажимать кнопки и реже чем в 1,5 сек. а сохранить(отправить данные на сервер) в идеале нужно только один раз, в конце ввода, после того как пользователь ушел из input'a. мне кажется что должен быть способ узнать что было событие клика на ссылку/кнопку(см. начало топика) и заставить выполниться обработчик этого события после onchange в input.

Автор: нуп 31.8.2011, 00:14
Тогда на линки повесить функцию, которая будет вызывать onchange событие
Код

document.getElementById('myinput').onchange();

Автор: Экскалупатор 31.8.2011, 16:00
нуп, тогда получается нужно на каждый линк писать вызов, как то не очень кошерно

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)