2011-11-07 24 views
0

自從我創建一個HTA代碼,我堅持使用IE :(jQuery的模具()不工作

我們需要捕獲在<select>元素的更改事件,但你猜怎麼着,IE不支持該事件。

所以我創建了一個方法來模仿它。隨着<input type="text">當它被點擊顯示<select>正下方。這部分工作正常。問題是,我想隱藏select當用戶點擊外select

我試圖趕上clickbody,它第一次正常工作,但第二次隱藏select試一試。

這裏一個簡化版本的代碼:

$('.product').live('click',function(){ 
    // Show the <select id="select"> code goes here 

    // this is the event to close the select 
    $('body').die().live('click', function(){ $('#select').fadeOut(250); return;}); 

    // get the click on the select element 
    $('#select').die().live('click',function(){ 
     // kill the close the select 
     // THIS IS THE .die() THAT DOES NOT WORK 
     $('body').die(); 

}); 

問題 有什麼不對的代碼?或者有沒有更好的方法來做到這一點?請記住,我堅持使用IE瀏覽器。

+1

Internet Explorer(至少7個或更多)確實支持「更改」事件。 [這裏是一個jsfiddle演示。](http://jsfiddle.net/23qm3/) – Pointy

+0

@Pointy你可以發佈到一個答案,所以我可以投票給你。你應該去上學。 –

+0

哈哈確定!只需一秒... – Pointy

回答

1

Internet Explorer 7和向上(大概6,因爲IE7是IE6大多與口紅,但我無法測試,很容易)支持更改事件。 Here是一個非常簡單的演示jsfiddle。

IE瀏覽器的事件確實很奇怪。例如,「更改」不會起泡(至少從<select>起,可能還有其他的東西),但jQuery爲你補丁。還有複選框和單選按鈕的經典問題,它們在失去焦點之前不會觸發「更改」(這使其基本無用)。對於那些,我發現「點擊」工作正常。

1

爲使.die()正確運行,與其一起使用的選擇器必須完全匹配最初與.live()一起使用的選擇器。

+0

已經查過的Wha,看例子 –

+1

如果你調用$(「#demo」)。live(「click」,click_does_this); die必須被稱爲$(「#demo」)。die(「click」,click_does_this);而不是$('#demo')。die();特別是如果你正在處理IE兼容性。無論如何,試着用.on()和.off()來使用jQuery 1.7,他們說IE的兼容性要好得多 – John