

input のテキスト要素の値の変更時にイベントを発生させたいのですが、  
javascriptで値を変更すると、changeではイベントが発生してくれません。  
どうしたら発生するでしょうか？

調べてみますと,onpropetychangeを使うといいらしいのですがうまくいきません

[code]

    var obj1 = document.getElementByID("XXXXX");
    obj1.addEventListener(function(){"propertychange",alert("イベント発生");},false);
    
[/code]

私が考えたのがこれですが、動きません。

環境はIE11,JavaScriptのみ(Jquery禁止)です。

ご回答よろしくお願いいたします。


CC BY-SA 3.0
2016-11-11T01:20:23.083
30311
2021-10-16T04:46:16.123
2016-11-11T02:04:00.223
18946
18946
question
javascript
INPUTの値の変更を感知するには？


コメントにもあるように誤字が散見されますが、下記で動くかと思います。

[code]

    var obj1 = document.getElementById("test");
    obj1.addEventListener('change', function(){alert("イベント発生");}, false);
[/code]

[code]

    <input type="text" id="test" />
[/code]


CC BY-SA 3.0
2016-11-11T01:46:25.727
30313
2016-11-11T01:46:25.727
30311
answer


スクリプトからイベント発火させるには、  
コメントでIEの場合[fireEvent ](https://msdn.microsoft.com/en-
us/library/ms536423%28VS.85%29.aspx)を使うと書いたのですが、  
（IE9が分水嶺らしい）  
IE11では[dispatchEvent](https://msdn.microsoft.com/en-
us/library/ff975247%28v=vs.85%29.aspx)を使うようです。  
（[createEvent](https://msdn.microsoft.com/en-
us/library/ff975304%28v=vs.85%29.aspx),
[initEvent](https://msdn.microsoft.com/en-
us/library/ff975459%28v=vs.85%29.aspx)）  
以下例：  
(私自身はIE11を使用していないのでIE11でテストしていません。動作しなかったらすみません。)

[code]

    var obj1 = document.getElementById("XXXXX");
    obj1.addEventListener('change', function(){alert("チェンジイベント発生");}, false);
    
    function changeAndFire(){
     var evt = document.createEvent("Event");
     evt.initEvent("change", false, false);
     obj1.value += "Test";
     obj1.dispatchEvent(evt);
    }
[/code]

[code]

    <input type="text" id="XXXXX" />
    <button type="button" onclick="changeAndFire()">スクリプトから値の変更とイベント発生</button>
[/code]


CC BY-SA 3.0
2016-11-11T03:23:52.403
30317
2016-11-11T03:23:52.403
5044
30311
answer


だいぶ時間が立っているので、解決されたとおもいますが、私も同じ問題に遭遇しました。  
投稿主は、多分、外部のスクリプトで値が設定されたことを検出したかったのだと思います。  
自分のスクリプトで値を設定するなら、上記のように、設定側で処理すれば対応可能です。

外部のスクリプトで、inputに値が設定されたのをイベントで検出することはできませんでした。  
そこで、タイマーイベントを使用して、inputの値を定期的にチェックして、変化を検出する方法で、対応しました。  
具体的には、郵便番号から住所に変換する処理を利用した際に、郵便番号フィールのの入力を検出して、郵便番号から住所に変換する関数を呼び出す際に、タイマーを設定して、入力フィールドの変化を検出する関数を呼び出すようにしました。  
都道府県名の入力フィールドに値が設定されたら、そこで必要な処理を行い、設定されない場合は、再度タイマーを設定しました。


CC BY-SA 4.0
2021-10-16T04:46:16.123
83124
2021-10-16T04:46:16.123
48666
30311
answer