Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > [jQuery]тонкости Event'a .change


Автор: DiMoN_TD 12.9.2008, 23:56
Всем здрасте!
Хочу задать вопрос:
У меня ситуация такова, что мне нужно при любом изменении поля input делать перерасчет суммы (к примеру).
Т.е. у меня примерно такая ситуация:

Код

<script type="text/javascript">
$(document).ready(function(){

 $("input[@name=inpname]").click(function(){
   $("input[@name=elsename]").attr("value","somevalue");
 })

  $("input[@name=elsename]").change(function(){
    var sum = sum*1 + 10;
  })

})
</script>


Вот. не смотрите на логику кода - в ней ее нет, но примерную проблему вы понимаете, да? Т.е. функция change не реагирует на то, что у меня меняется значение в input с именем name=elsename. Возможно есть другая функция для этого, если да, то какая? Если же можно решить эту проблему при помощь .change - то скажите как! Заранее спасибо! smile

 smile 

Автор: Sannis 14.9.2008, 23:07
Цитата(DiMoN_TD @  12.9.2008,  23:56 Найти цитируемый пост)
Т.е. функция change не реагирует на то, что у меня меняется значение в input с именем name=elsename
А как вы это определяете?

Код

var sum = sum*1 + 10;
У вас sum будет локальной переменной, может стоит var убрать?

Автор: Avb 15.9.2008, 14:49
DiMoN_TD, 
событие change происходит когда
1. Поле получило фокус
2. Значение поля изменилось
3. Поле потеряло фокус

Естесственно, пока поле не потеряет фокус onchange вызываться не будет.

Можно использовать события клавиатуры (keypress или keyup. Для кроссбраузерности скорее всего второе. Надо затестить.). Но в таком случае ничего не произойдет, если значение изменено посредством вставки из clipboard с помощью мыши.

В общем, наиболее простым и надежным методом является поставить проверку по таймауту (ну скажем каждые 100 мс). 
В prototype.js для этого есть класс  http://prototypejs.org/api/timedObserver

Автор: Avb 15.9.2008, 15:35
Для jQuery что-то подобное нашел в плагине http://plugins.jquery.com/project/form-observe
Но нужно докручивать под себя

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