piątek, 6 maja 2011

javascript onchange

Jedną z iście upierdliwych rzeczy podczas pisania skryptów w js jest event onchange, który ma odpalać się w momencie zmiany zawartości elementu. Sam event w sobie jest bardzo fajny i nic do niego nie mam, natomiast problemem jest uboga dokumentacja języka, a konkretniej to, że większość źródeł nie informuje o tym, iż zdarzenie onchange jest uruchamiane tylko w przypadku zmiany wartości przez użytkownika.

Tak więc jeśli mamy taki kod:
function funx()
{
   var x = document.getElementById('input');
   x.value = 'nowa wartość';
}
To wartość elementu #input owszem zostanie zmieniona, ale jego onchange już uruchomiony nie zostanie. Remedium? Wystarczy dodać jedną linijkę:
function funx()
{
   var x = document.getElementById('input');
   x.value = 'nowa wartość';
   x.onchange();
}
x.onchange() powoduje iż skrypt uruchamia kod podpięty pod eventa onchange.

I żeby nie było - taka budowa tego eventa jest bardzo rozsądna (ogranicza niepożądane rekurencje, upraszcza kod).

2 komentarze:

  1. Polecam zamiast tego używanie jquerowego change()

    http://api.jquery.com/change/

    Natomiast analogicznie do odpalania eventów służy trigger

    http://api.jquery.com/trigger/

    OdpowiedzUsuń
  2. oczywiście można używać jQuery do wszystkiego i zwykle bardzo fajne rzeczy za jego pomocą wychodzą.. tyle, że nie zawsze jQuery chcemy/możemy używać :)

    a i ja jestem taki dziwak, że jakoś nie podchodzi mi cały ten jQuery ^^

    OdpowiedzUsuń