Вход

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


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 обработчик повесить :)

щас намучу пример

<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 формы
вроде работает