2011-09-14 57 views
5

你有沒有面對這個IE7的bug:解決IE7錯誤「輸入類型=文件」onchange激發兩次?

<input type="file" id="xxx"> 

<script> 
    $('#xxx').change(function(){ alert(1) }) 
</script> 

當我點擊輸入&選擇一個文件時,alertbox顯示的第一次。然後我點擊身體上的空白區域,警告框再次顯示。即使我將更改事件綁定到輸入時,也會發生這種情況:帶有JQuery 1.6的文件(此時爲最新版本)。

我怎樣才能以最簡單的方式防止這種情況?感謝所有的建議!

+0

我認爲在IE7中第一個事件是文件改變,第二個事件發生在領域失去焦點時(onblur)。 –

+0

我討厭建議一個變量來限制代碼只執行一次。 – f0x

回答

6

這就是我所做的「頭腦風暴」的一些硬小時後:

$('input:file').click(
    function(){ 
     $(this).one(
       'change', 
       function(){ alert(1) /*do stuff here*/ } 
     ) 
    } 
) 

每次用戶點擊輸入選擇文件,我們將事件「更改」與它綁定一次。因此,每次用戶想要選擇文件時,事件都會激發一次。

並感謝上帝它的作品!謝謝你們。

+0

非常感謝!希望我可以多次讚揚它。解決了我的問題。 – SirDerpington

0

我只想取消綁定觸發一旦你的函數跑

+0

在第一次運行後,在頁面訪問期間終止函數? ;) – f0x

+0

您是對的,那麼可以將事件放在.blur()觸發器上進行測試,以便在被調用兩次時看到它,IE可能向.change()發送兩條指令,其中.blur( )是當你失去重點 – Narvath