Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Какой обработчик события использовать ? (https://javascript.ru/forum/dom-window/13006-kakojj-obrabotchik-sobytiya-ispolzovat.html)

lolka84 12.11.2010 13:24

Какой обработчик события использовать ?
 
Добрый день.
Имеем input1 и input2. При занесении числа в input1 происходит некое вычисление, результат которого заносится в input2. По задумке нужно сделать, что б после того, как input2 получит значение, срабатывала функция. Каким обработчиком ее вызвать ? Пробывал "onchange" - бестолку.

monolithed 12.11.2010 13:34

lolka84 где ваш код?

На вскидку:

<form name="forma">
    <input type="text" />
    <input type="text" />
</form>

<script type="text/javascript">
window.onload = function(){
    var event = ['keyup', 'change'];
    for(i=0; i<event.length; i++){
       document.forms['forma']['on'+event[i]] = function(i){
           return function(){
               this.elements[1].value = (this.elements[0].value == '') ? '' : eval(this.elements[0].value);
           };
      }(i);
    }
};
</script>

lolka84 12.11.2010 13:50

monolithed, код тут особого значения не имеет, это так сказать "вопрос общего плана" :)
Насчет вашего примера: немного неправильно меня поняли.
Имеем:
<form name="forma">
    <input id="one" type="text" value="" onkeyup="func();" />
    <input id="two" type="text" value="" readonly СОБЫТИЕ???="func1();" />
    <input id="free" type="text" value="" readonly />
</form>

<script type="text/javascript">
function func() {
  var in1 = document.getElementById("one"),
       in2 = document.getElementById("two");
  in2.value = Number(in1.value) + 5;
}
function func1() {
  var in2 = document.getElementById("two"),
       in3 = document.getElementById("free");
  in3.value = Number(in2.value) + 3;
}
</script>

Т.е. вводим число в инпут1, функция считает, бросает результат в инпут2, другая функция опять считает и выводит итог в инпут3.
Можно канешно сделать с помощью
return func1();
но по ряду причин делать так не хочу.

monolithed 12.11.2010 14:39

Цитата:

Сообщение от lolka84
Т.е. вводим число в инпут1, функция считает, бросает результат в инпут2, другая функция опять считает и выводит итог в инпут3

И что тут такого сложного-то?

<form name="forma">
    <input type="text" />
    <input type="text" />
    <input type="text" />
</form>

<script type="text/javascript">
window.onload = function(){
    var event = ['keyup', 'change'];
    for(i=0; i<event.length; i++){
       document.forms['forma']['on'+event[i]] = function(i){
           return function(){
               this.elements[1].value = this.elements[0].value == '' ? '' : eval(this.elements[0].value) + 5;
               this.elements[2].value = this.elements[0].value == '' ? '' : eval(this.elements[1].value) + 5;
           };
      }(i);
    }
};
</script>


Цитата:

Сообщение от lolka84
<input id="free" type="text" value="" readonly />

readonly в вашем случае ставить не обязательно

lolka84 12.11.2010 20:09

monolithed, спасибо.
А почему тогда не работает, если просто написать <input id="two" type="text" value="" readonly onchange="func1();" /> ?

monolithed 12.11.2010 20:23

Цитата:

Сообщение от lolka84
А почему тогда не работает, если просто написать <input id="two" type="text" value="" readonly onchange="func1();" /> ?

1. логику от представления нужно отделять, поэтому так лучше не писать вообще
2. проанализируйте мой код, там два события, и поймите почему именно два

lolka84 12.11.2010 21:02

Цитата:

Сообщение от monolithed (Сообщение 78865)
1. логику от представления нужно отделять, поэтому так лучше не писать вообще

Можно подробнее ? Или ссылочку, где почитать можно. Ибо, вот честно, так довольно трудно понять в чем тонкость.

Цитата:

Сообщение от monolithed (Сообщение 78865)
2. проанализируйте мой код, там два события, и поймите почему именно два

Ок)

monolithed 12.11.2010 21:07

Цитата:

Сообщение от lolka84
Можно подробнее ?

http://ajax-scripts.ru/otdelenie_log...stavlenia.html
http://ru.wikipedia.org/wiki/Model-View-Controller

lolka84 12.11.2010 21:12

Спасибо.


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