2009-07-17 8 views
9

これまでのところ、Internet Explorerでは唯一壊れているとしか言えません。私は複数の動的<選択>要素を作成し、それらのためのonchangeイベントを追加するスクリプトを持っています。 onchangeイベントはFirefoxで問題なく起動しますが、Internet Explorerでは発生しません。開発者ツールバーを使用する私は、DOMが正しいイベントがリストされていることを確認します。動的に追加されたSELECT要素は、Internet Explorerでonchangeイベントを発生させません

<html> 
    <head> 
     <script language="javascript"> 
      function addSelect() { 
       var se = document.createElement('select'); 
       se.setAttribute("onchange", "alert('Dynamic')"); 
       se.options[0] = new Option("1", "1"); 
       se.options[1] = new Option("2", "2"); 
       se.options[2] = new Option("3", "3"); 
       se.options[3] = new Option("4", "4"); 
       var plh = document.getElementById("ph"); 
       plh.appendChild(se); 
      } 
     </script> 
    </head> 
    <body onload="addSelect()"> 
     <select name="something" onchange="alert('Static')"> 
      <optgroup label="set1"> 
      <option value="1">1</option> 
      <option value="2">2</option> 
      </optgroup> 
      <optgroup label="set2"> 
      <option value="3">3</option> 
      <option value="4">4</option> 
      </optgroup> 
     </select> 
     <div id="ph"> 
     </div> 
    </body> 
</html> 

静的な警告メッセージが細かいアップしますが、動的な1 Internet Explorerで何もしない:私は、次のコードに問題を煮詰めてきました。私はほぼポジティブですが、私はこの仕事を他の場所で見てきましたが、私は他の例を見つけることができません。誰かがこれを動作させる方法を見たり知ったりしていますか?

答えて

11

変更:

se.setAttribute("onchange", "alert('Dynamic')"); 

に:

se.setAttribute("onchange", function(){alert('Dynamic')}); 

かさえ短い:

se.onchange = function(){alert('Dynamic')}; 
+0

またはイベント/トリガ:) –

+0

オリジナルの問題をバインドするjQueryのを使用するには、jQueryのを使用し、標準属性が問題の一部であったとしてイベントを処理しようとしています。なぜIEは文字列を解析するだけでなく、大きな痛みです... –

+0

jQueryの.attr()関数を使用してonchangeイベントを割り当てようとすると問題が発生しました。 elem.onchange = function(){blah; }私のためにうまくいきました。 – kdawg

1

私はhttp://jehiah.cz/a/firing-javascript-events-properlyとページのリロードからソリューションを取った(サーバー側の操作が通過トリガあり変更後)イベントIE9を発射した後、それは働いた。私は以前のバージョンのIEについてはわかりません。それはChromeとFFで動作します。

function fireEvent(element,event){ 
    if (document.createEventObject){ 
     // dispatch for IE 
     var evt = document.createEventObject(); 
     element.fireEvent('on'+event,evt); 
     javascript:location.reload(true); 
    } 
    else{ 
    // dispatch for firefox + others 
     var evt = document.createEvent("HTMLEvents"); 
     evt.initEvent(event, true, true); // event type,bubbling,cancelable 
     return !element.dispatchEvent(evt); 
    } 
} 
関連する問題