ng-model-on-blur ディレクティブ ( Angularjs からコピー: input[text] ngChange fires while the value is changing ) を含む入力テキスト ボックスがあり、ng-change イベント ハンドラーがアタッチされています。ユーザーが箱から出して入力すると、ng-changeに添付された関数が起動するので、うまく機能します。リンク機能を変更して、変更イベントと貼り付けイベントにもバインドするようにしました。
link: function(scope, elm, attr, ngModelCtrl) {
if (attr.type === 'radio' || attr.type === 'checkbox') return;
if($sniffer.hasEvent('input')){
elm.unbind('input').unbind('keydown').unbind('change').unbind('paste');
}
else if($sniffer.hasEvent('change')){
elm.unbind('input').unbind('keydown').unbind('change').unbind('paste');
}
//IE8 doesn't recognize the input or change events and throws error on unbind input.
else{
elm.unbind('keydown').unbind('change').unbind('paste');
}
elm.bind('blur change paste', function() {
scope.$apply(function() {
ngModelCtrl.$setViewValue(elm.val());
});
});
}
そのページには、ユーザーが何かを入力して値を親ページの入力テキスト ボックスに戻すことができるポップアップ ページを開くボタンがあります。他のほとんどのブラウザー (Chrome、Firefox、Safari、さらには IE8..) では、データがポップアップから入力テキスト ボックスに受信されたときに ng-change が起動されますが、IE9 および 10 では、ng-change は起動されません。ポップアップからデータを受け取ります。ユーザーがフィールドの外に入力したり、データを手動で貼り付けたり、テキスト ボックスを右クリックしたりすると、ディレクティブは ng-change 関数を呼び出しますが、データがポップアップから来る場合は関数を起動しません。
ポップアップは AngularJS を使用せず、window オブジェクトの opener プロパティを使用して値を入力テキスト ボックスに転送します。
どんな助けでも大歓迎です!