2012-09-25 23 views
20

¿Cómo puedo detectar un cambio en el valor de una entrada oculta? Ya lo he intentado sin éxito estos enfoques:evento de cambio de entrada oculta

$('#id_inpout').live('change',function() { 
     var id_el = $(this).attr('id'); 
     alert(id_el); 
    }); 

y

$('#id_inpout').change(function() { 
     var id_el = $(this).attr('id'); 
     alert(id_el); 
    }); 

y

$('#id_inpout').bind('change',function() { 
     var id_el = $(this).attr('id'); 
     alert(id_el); 
    }); 
+6

duplicar? http://stackoverflow.com/questions/6533087/jquery-detect-value-change-on-hidden-input-field – max4ever

+1

Pero ninguna de las respuestas de la otra pregunta es aceptable ... Incluso el votado por encima implica llamar al disparando explícitamente ... –

+0

¿Qué tal esta respuesta? http://stackoverflow.com/questions/1003053/does-html-hidden-control-have-any-events-like-onchange-or-something – palmplam

Respuesta

25

Como se ha dicho en los duplicados, y como se vio, los cambios hecho en javascript Don' t desencadenar el evento change.

Como no encontré respuestas aceptables en los duplicados (es decir, las respuestas no implican un cambio en la forma en que se establece el valor oculto), y suponiendo que realmente necesita ese (es decir, no puede llamar a su función cuando cambia el val entrada oculta), esto es lo que podría hacer:

function survey(selector, callback) { 
    var input = $(selector); 
    var oldvalue = input.val(); 
    setInterval(function(){ 
     if (input.val()!=oldvalue){ 
      oldvalue = input.val(); 
      callback(); 
     } 
    }, 100); 
} 
survey('#id_inpout', function(){console.log('changed')}); 

Pero yo usaría preferiblemente un soluciones más directas (es decir, llamar a una función cuando cambia el valor de entrada oculta). Esta función puede ser un simple despachador de eventos propio (básicamente un objeto que envuelve una lista de funciones para llamar cuando se llama).

EDIT: Ahora es 2015 y para la gente que se pregunta, no, ninguno de los avances recientes del mundo de la web resuelve ese problema. Los observadores de mutaciones no observan la propiedad de valor de la entrada (en realidad no es el DOM) y el observador de objetos ES6 tampoco tiene poder para esos objetos nativos.

+0

gracias, la función de encuesta funciona perfectamente – chokrijobs

+0

thak es para todos, usaré la función de encuesta – chokrijobs

+0

Parece que con el observador de mutaciones funciona: http://stackoverflow.com/a/31719339/2418749 –

68

También es posible usar trigger('change') después de asignar un nuevo valor a la entrada oculta:

$('#hidden_input').val('new_value').trigger('change'); 
+1

+1 ¡Excelente! Justo lo que necesitaba. Ahora, ¿por qué no pensé en eso? – GreatSeaSpider

+0

ayudado en mi problema, gracias –

+8

también puede usar $ ('# hidden_input'). Val ('new_value'). Change(); –

Cuestiones relacionadas