web-dev-qa-db-ja.com

隠された入力変更イベント

非表示の入力の値の変化を検出するにはどうすればよいですか?私はすでに成功せずにこれらのアプローチを試しました:

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

重複して言われたように、そしてあなたが見たように、javascriptで行われた変更はchangeイベントを引き起こしません。

重複で許容可能な回答が見つからなかったので(つまり、非表示の値の設定方法の変更を伴わない回答)、そして本当に必要な場合(つまり、呼び出すことはできません)隠された入力値を変更するときの関数)、ここであなたがするかもしれないことです:

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オブジェクトオブザーバーはこれらのネイティブオブジェクトに対しても無力です。

27
Denys Séguret

非表示の入力に新しい値を割り当てた後、trigger('change')を使用することもできます。

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