Ver Mensaje Individual
  #6 (permalink)  
Antiguo 13/12/2016, 04:52
Avatar de majete
majete
 
Fecha de Ingreso: noviembre-2007
Mensajes: 96
Antigüedad: 17 años
Puntos: 2
Respuesta: Detectar evento "onchange" en lista desplegable

Cita:
Iniciado por Alexis88 Ver Mensaje
El punto es que, si realizas el cambio desde el código, se omite la interacción con el DOM, por lo que evidentemente esos eventos no se ejecutarán. Por eso es que te sugiero que, en el bloque de código en el que realizas la asignación de del dato, ejecutes las acciones que deseas. Si no quieres repetir líneas de código, puedes tener todo en una función a la cual solo tendrías que llamar.

Un ejemplo:
Código HTML:
Ver original
  1. <select id="foo">...</select>
  2. <input type="text" id="bar" />
Código Javascript:
Ver original
  1. //La función a ejecutarse
  2. function ejemplo(){
  3.     alert("Ocurrió un cambio");
  4. }
  5.  
  6. //Si se producen estos eventos en los elementos del DOM, se ejecutará la función "ejemplo"
  7. $("#foo").on("change", ejemplo);
  8. $("#bar").on("keydown change", ejemplo);
  9.  
  10. //Si hago el cambio de valor desde el código, también se ejecutará la función "ejemplo"
  11. $("#foo").val("abc");
  12. ejemplo();
  13.  
  14. $("#bar").val("def");
  15. ejemplo();

Exactamente es lo que me comentas... al realizar el cambio desde código, no llega la interacción al DOM y el evento no se ejecuta. Me es imposible saber qué es lo que le tengo que meter a la función, porque el JS que hay ahora (formeter.js) me resulta muy complicado de entender. Empieza así:
Código Javascript:
Ver original
  1. (function ($) {
  2.     $.fn.extend({
  3.         formProgress: function (options) {
  4.             var st = {
  5.                 speed: 300,
  6.                 style: 'green',
  7.                 bubble: false,
  8.                 selector: '.required',
  9.                 minPercent: 30,
  10.                 message: 'Please complete all required fields !'
  11.             };
  12.             if (options) {
  13.                 $.extend(st, options);
  14.             }
  15.             var _this = $(this),
  16.                 sel = st.selector,
  17.                 mainForm = $(sel).parents('form'),
  18.                 names = [],
  19.                 timer;
  20.  
  21.             $(sel + ":radio").each(function () {
  22.                 var n = $(this).attr('name');
  23.                 if ($.inArray(n, names) < 0) {
  24.                     names.push(n);
  25.                 }
  26.             });
  27.  
  28.             var totalInputs = $(sel).not(":radio").length + names.length;
  29.  
  30.             $(mainForm).find(sel + ':checkbox, ' + sel + ':radio, select' + sel).on('change', function () {
  31.                 animateBar.call(_this);
  32.             });
  33.             $(mainForm).find('input[type=text]' + sel + ', input[type=password]' + sel + ', textarea' + sel + ', input[type=hidden]' + sel + ',  input[type=email]' + sel + ', input[type=tel]' + sel).on('keydown', function () {
  34.                 timer && clearTimeout(timer);
  35.                 timer = setTimeout(function () {
  36.                     animateBar.call(_this);
  37.                 }, 300);
  38.             });
  39. ...

Los cambios en los campos de formulario se ejecutan en los "onchange" u "onkeydown"...

Última edición por majete; 13/12/2016 a las 04:58 Razón: Faltaba información