Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как сделать реакцию на изменение любого элемента формы. (https://javascript.ru/forum/events/19151-kak-sdelat-reakciyu-na-izmenenie-lyubogo-ehlementa-formy.html)

Mik 27.07.2011 16:06

Как сделать реакцию на изменение любого элемента формы.
 
Привет народ.

У меня есть форма с кучей полей. По кнопке все поля ajax'яться на сервер и по ним считается цена товара. Потом цена записывается в поле, чтобы юзер видел и становиться активна кнопка 'заказать'. Я хочу приделать некий скрипт на изменении любого поля формы, чтобы кнопка 'заказать' гасла(так как цена естественно будет другая).

Как сделать реакцию на изменение любого элемента формы?

Запихивать в onchange каждого элемента формы вызов нужной функции, это паталогическое рукоблудие(input
'ов очень много), должно быть какое-то более простое решение.

Возможно тема уже обсуждалась, но я не представляю, как объяснить проблему поиску. Вбивал вопрос как есть - ничего не нашел...

:help:

Mik 27.07.2011 16:50

Нашел более или менее приличное решение:
http://api.jquery.com/change/

Но все равно не айс.
Странно что не сделали onchange для все формы :-?

melky 27.07.2011 16:57

попробуй на всю форму change обработчик повесить :)

щас намучу пример
Пример: На Mootools
<form id="a">
    <input><select><option></option><option>kjkj</option></select>
</form>
<button id="b" style="display:none">отправить</button>

<script src="http://yandex.st/mootools/1.3.1/mootools.min.js"></script>

<script>
var b  = $("b").style;

$("a").addEvent("change", function(){
    var ok = true;

    this.getChildren().each(
        function(a,b,c){ 
            if( a.value.length === 0 ) ok = false;
        });

    
    b.display = ok ? "block" : "none";  
})
</script>


// по изменению формы
$("a").addEvent("change", function(){
    var ok = true;

// проходимся по детям.
// если один из детей пуст - форма забракована.
    this.getChildren().each(
        function(a,b,c){ 
            if( a.value.length === 0 ) ok = false;
        });

    
    $("b").style.display = ok ? "block" : "none";  
})

Mik 28.07.2011 08:52

В конечном счете сделал так:
function formOnChange()
{
disableSendButtons(true);
}
jQuery("#frame-params").bind("change", formOnChange);

#frame-params - id формы
вроде работает


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