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

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

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

2 ответа

Решение

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

Поскольку я не нашел приемлемых ответов в дубликатах (то есть ответов, не связанных с изменением способа установки скрытого значения), и предположил, что вам это действительно нужно (то есть вы не можете вызвать свою функцию при изменении скрытого значения). input 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')}); 

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

РЕДАКТИРОВАТЬ: Сейчас 2015, и для людей, интересующихся, нет, ни один из последних достижений в мире Интернета не решает эту проблему. Наблюдатели мутаций не наблюдают свойство value ввода (это не совсем DOM), и объект-наблюдатель ES6 также бессилен для этих нативных объектов.

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

$('#hidden_input').val('new_value').trigger('change');
Другие вопросы по тегам