Скрытое событие изменения ввода

Как я могу обнаружить изменение значения скрытого ввода? Я уже пробовал эти подходы без успеха:

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

и

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

и

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

Ответ 1

Как было сказано в дубликатах, и, как вы видели, изменения, сделанные в javascript, не вызывают событие change.

Поскольку я не нашел приемлемых ответов в дубликатах (это ответы не связаны с изменением способа установки скрытого значения) и , если вам действительно нужно, что (то есть вы можете 't вызывать свою функцию при изменении скрытого ввода val), вот что вы можете сделать:

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

Но я предпочел бы использовать более прямые решения (т.е. вызывать функцию при изменении скрытого входного значения). Эта функция может быть простым диспетчером событий (в основном объект, который обертывает список функций для вызова при его вызове).

EDIT: Сейчас 2015 год, и для людей интересно, нет, ни один из последних достижений веб-мира не решает эту проблему. Наблюдатели мутаций не видят свойства значения входа (это не DOM), а наблюдатель объектов ES6 также не имеют возможности для этих нативных объектов.

Ответ 2

Вы также можете использовать trigger('change') после назначения нового значения скрытому вводу:

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