2
<a href="javascript:void(0)" id="select-handler">select</a>
<input type="file" id="real-file-input" style="display:none" />

$('#select-handler').click(function(){
    $('#real-file-input').click(); 
});

$('#real-file-input').bind('propertychange', function(){
    alert('changed');
});

.click()を使用するpropertychangeと解雇されないのは奇妙です。

4

2 に答える 2

4

実際、あなたのコードはIE7 と 8で正常に動作し、 の値を変更するたびにinput type ='file'アラートが発生します。>IE9バージョンでは機能しません。

Internet Explorer 9の paulbakaus のブログからpropertychange

propertychangeIE9の何が問題になっていますか?

  1. IE9 は、addEventListener を介して非標準イベントをバインドするときに非標準イベントを発生させません。jQuery を含む、機能検出を使用する最新の JS ライブラリはすべて失敗します ( http://bugs.jquery.com/ticket/8485も参照)。「大したことではない」とあなたは言いますが、「単に attachEvent を直接使用するだけです」とあなたは言いますか?

  2. 良いニュース: attachEvent を使用すると、propertychange が発生します。悪いニュース: エンジンに認識されていない要素の CSS プロパティを変更すると、起動が拒否されます。あなたは言う?

  3. DOMAttrModifiedまったく同じ動作を特徴とします。不明な CSS プロパティに対しては起動しません。これは完全な災害です。

多くの開発者が同じ奇妙な振る舞いに直面しています。

なぜonpropertychangeInternet Explorer だけがサポートするものを使用したいのですか?

changeイベントハンドラーに移りたい

$('#real-file-input').bind('change', function(){
    alert('changed');
});

または、HTML5の場合はinputイベント ハンドラーです。

$('#real-file-input').bind('input', function(){
    alert('changed');
});
于 2013-08-26T05:20:55.597 に答える
1

残念ながら、IE9 は削除時の "input propertychange" イベントをサポートしていません。Escape、Delete、および Backspace は、event.which で「keyup」イベントを使用して簡単にキャプチャできますが、テキストの選択と右クリックによる削除 -> delete では、イベント propertychange、change、select、または keyup/keydown が発生しません。

これまでのところ、この問題の解決策は見つかりませんでした。

ここに私のコードがあります:

$('#search_input').on("propertychange input", function(event){
  console.log('propertychange event');
  // trigger search
});
$('#search_input').on("keyup", function(event){
  console.log('keyup event', event.which);
  if(event.which === 27) { // on ESC empty value and clear search
    $(this).val('');
    // trigger search
  } else if(event.which === 8 || event.which === 46) { // trigger search on Backspace
    // trigger search
  }
});
$('#search_input').on("change input", function(event){
  console.log('change event');
  // trigger search
});
$('#search_input').on("select input", function(event){
  console.log('select event');
  // trigger search
});
于 2015-02-11T17:21:19.987 に答える