2009-08-10 18 views
2

はい、IEでは動作せず、「クリック」を使用しています。しかし、ここに私の問題があります。jquery 'change'イベントがIEで動作していません

私は2つの選択ボックス - 国と都市を持っています。 国を選択すると、都市選択ボックスが表示されます(Googleマップが更新されます)。

次のコードは、IEとOperaで魔法のように動作します:

if (jQuery('#city').length > 0) { 
    jQuery('#city').change(function(){ populateCityListBox(); }); 
    } 

私が使用している場合は、私が選択ボックスの矢印をクリックすると、その後populateCityListBoxは()を1回トリガされ、代わりに「変更」の「クリック」 、もう一度、リストボックス要素をクリックします。

このダブルトリガーを避けるにはどうすればよいですか?

答えて

2

IEは、要素がフォーカスを失うまで、変更イベントを発生させないという問題があります。

単純な解決策は、選択の最後の値を追跡し、関数が異なる場合にのみ関数を実行できるようにすることです。

また、あなたのchangeコールバックでは、あなたがしていることすべてがコールしている場合は、匿名関数でラップする必要はありません。

jQuery('#city').change(populateCityListBox); 

は、あなたが持っているものとまったく同じです。

+0

IE8とIE7(Compat)の.changeでフォーカスを失うことなくうまく動作するselectがあります。 – Marc

+0

マーク:私たちにコードを教えてもらえますか? – Steven

+0

@スティーブン、魔法の$はありません( "#id-selector")。 TM – Marc

0

これは(ただし、テストされていない)うまくいくかもしれない:

if ($.browser.msie) { 
    var interval = 50; 
    var changeHack = 'change-hac'; 
    var select = $("#viewByOrg"); 
    select.data(changeHack) = select.val(); 
    var checkVal=function() { 
    var oldVal = select.data(changeHack); 
    var newVal = select.val(); 
    if (oldVal !== newVal) { 
     select.data(changeHack, newVal); 
     select.trigger('change') 
    } 
    setTimeout(changeHack, interval); 
    } 
    setTimeout(changeHack, interval); 
} 

は、あなたの気持ちに合った間隔で遊びます。 また、トリガー( '変更')トリックが機能しない場合は、そこで直接onchangeメソッドを呼び出してみてください。

関連する問題