2012-09-25 3 views
20

Wie kann ich eine Änderung des Werts eines verborgenen Eingangs erkennen? Ich habe bereits versucht, diese Ansätze ohne Erfolg:versteckter Eingang Änderungsereignis

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

und

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

und

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

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

+1

Aber keine der Antworten der anderen Frage ist akzeptabel ... Selbst die Upvoted involvieren den Aufruf der Triggerung explizit ... –

+0

Was ist mit dieser Antwort? http://StackOverflow.com/Questions/1003053/does-html-hidden-control-have-any-events-like-onchange-for-omething – palmplam

Antwort

25

Wie in Duplikaten gesagt wurde, und wie Sie gesehen haben, getan Änderungen in JavaScript don‘ t löst das Ereignis change aus.

Da ich nicht akzeptabel Antworten in der Duplikate gefunden haben (dh Antworten nicht eine Änderung in der Art und Weise der verborgene Wert gesetzt Beteiligung) und vorausgesetzt Sie wirklich brauchen, dass (dh nicht rufen Sie können Ihre Funktion, wenn Sie die versteckten Eingang val ändern), ist hier, was Sie tun könnten:

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')}); 

Aber ich würde vorzugsweise einen direkteren Lösungen (dh eine Funktion aufrufen verwenden, wenn Sie die versteckten Eingabewert ändern). Diese Funktion könnte ein einfacher Event-Dispatcher sein (im Grunde ein Objekt, das eine Liste von Funktionen umschließt, die beim Aufruf aufgerufen werden).

EDIT: Es ist jetzt 2015 und für Leute, die sich wundern, nein, keine der jüngsten Fortschritte der Web-Welt lösen dieses Problem. Mutationsbeobachter beobachten nicht die Werteigenschaft der Eingabe (es ist nicht wirklich das DOM) und ES6-Objektbeobachter sind auch für diese nativen Objekte machtlos.

+0

Thank's Dystroy, Umfrage Funktion funktioniert perfekt – chokrijobs

+0

Thak für alle, ich werde die Umfrage-Funktion verwenden – chokrijobs

+0

Es scheint, dass mit Mutation Beobachter funktioniert es: http://stackoverflow.com/a/31719339/2418749 –

68

Sie auch trigger('change') verwenden könnte, nachdem Sie neuen Wert der verborgenen Eingang zuweisen:

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

+1 Ausgezeichnet! Genau das, was ich brauchte. Nun, warum habe ich nicht daran gedacht? – GreatSeaSpider

+0

half in meinem Problem, danke –

+8

Sie können auch $ ('# hidden_input'). Val ('new_value'). Change(); –