24

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

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

2 に答える 2

72

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

$('#hidden_input').val('new_value').trigger('change');
于 2013-02-12T14:33:08.197 に答える
27

change重複で述べたように、ご覧のとおり、javascript で行われた変更はイベントをトリガーしません。

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

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 年ですが、ウェブ世界の最近の進歩はどれもその問題を解決していません。Mutation オブザーバーは入力の value プロパティを監視せず (実際には DOM ではありません)、ES6 オブジェクト オブザーバーはこれらのネイティブ オブジェクトに対しても無力です。

于 2012-09-25T10:18:17.587 に答える