2013-04-09 20 views
0

我有一個模式框覆蓋,用戶編輯一些信息。關閉此覆蓋的方法之一是通過簡單按下ESC。這個工作我沒有問題。但是,在此模式框中是用於上傳文件的部分。當用戶選擇一個文件時,如果用戶按ESC鍵,它會關閉'選擇文件'對話框,但是那個按鍵也可以通過'模式框關閉'腳本來檢測。我確實有一個確認對話框詢問用戶他們是否確定要關閉該框,但如果他們僅嘗試關閉「文件選擇」對話框,我仍然不希望觸發該操作。Javascript/jquery - 檢測按鍵,除非文件選擇對話框顯示

這裏最好的方法是什麼?有沒有一種方法可以確定瀏覽器的焦點是在「文件選擇」對話框中,而不是實際頁面的一部分?

更新: 前三個答案基本相同,解決方案非常簡單我實際上很尷尬,我甚至問過。謝謝您的幫助。通常我會接受一個答案,但由於三者是相同的,我不確定如何選擇最喜歡的。我想我會選一個。儘管如此,這並不能使其他兩個人不能接受。謝謝大家。

回答

1

這裏最好的方法是什麼?有沒有一種方法可以確定 瀏覽器的焦點是在「文件選擇」對話框中,而實際頁面的部分是 ?

爲什麼弄得這麼複雜,你必須確定,如果用戶點擊「選擇文件」按鈕的功能,讓你可以設置一個標誌變量,並將其設置爲true時,他們單擊此按鈕。

然後你的keydown/keyup事件可以檢查標誌並相應地處理場景。

編輯:

示例代碼:

var SelectFileCode = { 
    IsSelectingFile: false, 

    Click: function() { 
     this.IsSelectingFile = true; 
     //do stuff here to open dialog 
    }, 
    KeyDown: function(event) { 
    if (this.IsSelectingFile && event.which == 27) //pressed ESC 
     //don't close modal, just close select dialog 
    } 
}; 

$(function() { 
    $('.selectBtn').click(SelectFileCode.Click); 
    $('.modal').keydown(SelectFileCode.KeyDown); 
}); 

你需要確保正確地復位IsSelectingFile,但是這將是通用的方法。

+0

我接受了你的答案,因爲你提供了一個例子。即使我不需要它,也許它可以幫助別人。我不知道我爲什麼問這個問題。它應該對我很明顯。我想我只是如此專注於檢測對話框,我忘記了我可以檢測到用戶的操作。再次,謝謝。 – vertigoelectric 2013-04-09 06:44:46

+0

@vertigoelectric'......我甚至尷尬,我甚至問'。沒有理由感到尷尬。這是一項技能,你必須隨着時間的推移不要過度複雜化程序的邏輯/控制流程。有時候,我們只是大腦放屁。 = P – 2013-04-09 06:45:29

+0

在這種情況下絕對是一個大腦放屁......哈哈。 – vertigoelectric 2013-04-09 06:47:34

1

當對話框打開時,將標誌變量設置爲true。當對話框關閉時將其更改爲false。如果它爲false,則應用按鍵邏輯。

+0

@vertigoelectric是否解決您的問題 – PSR 2013-04-09 06:32:59

+0

我只能接受一個答案,所以我選擇了一個提供最有用的細節。不過,我投了你的票。謝謝。 – vertigoelectric 2013-04-09 06:45:48

+0

沒問題。最後我們只需要解決方案。 – PSR 2013-04-09 06:46:22

1

當按下瀏覽文件按鈕時,您可以設置一個變量(一個標誌)。稍後關閉模式框時,只需檢查該標誌,如果它打開,則不要關閉該框。

相關問題