2015-07-01 44 views
5

我試圖阻止退格鍵在每個瀏覽器中返回一頁。現在我正在使用此代碼:jquery select下拉菜單打開時會忽略keydown事件嗎?

$(document).on("keydown", function (e) { 
    if (e.which === 8 && !$(e.target).is("input, textarea")) { 
     e.preventDefault(); 
    } 
}); 

它工作正常的一切,當一個選擇欄下拉列表打開除外,此事件被忽略和退格把我一個頁面回反正。我怎麼解決這個問題?謝謝您的回答。

回答

2

只爲信息,這是谷歌Chrome瀏覽器的具體因爲你的代碼在IE和FF正常工作。

如果你真的需要這個工作,你可以渲染一個假的下拉,並設置編程選擇。

您可以更改下拉列表的大小出現,因爲它是開放的,是這樣的: https://jsfiddle.net/yzr2cmqv/

<div clas="select-wrap"> 
    <div class="fake-select"></div> 
    <select class="select"> 
     <option value="1">one</option> 
     <option value="2">two</option> 
     <option value="3">three</option> 
    </select> 
</div> 

$(".fake-select").on("click", function() { 
    var numOfOpen = $("select.select option").size(); 
    $(".select").attr("size", numOfOpen).css("overflow", "hidden"); 
    $(this).hide(); 
}); 

$(".select").on("click", function() { 
    $(".select").attr("size", 1); 
    $(".fake-select").show(); 
}); 

以外,我不認爲你可以做任何事情,因爲Chrome的事件不被解僱時下拉菜單已打開。

+1

看起來這是Chrome中的一個錯誤。我已經報道過。感謝您的幫助。 – Silko

+0

很酷的技術來改變'尺寸',雖然它不幸中斷鍵盤導航... –

+1

你可以實現額外的事件在鍵上/下,重現相同的邏輯,像這樣的思想somethink: https://jsfiddle.net/yzr2cmqv/15 / – Shark4109

-2

select標籤只需添加到您的選擇:

$(document).on("keydown", function (e) { 
    if (e.which === 8 && !$(e.target).is("input, textarea, select")) { 
     e.preventDefault(); 
    } 
}); 
+0

你不明白我的疑問。你做了什麼讓事情變得更糟。 select中的默認事件返回頁面,如果我將其添加到建議的位置,則它在關閉下拉菜單時也不起作用。 – Silko

-2

你必須馬上檢查keydown事件上$(選擇),如果添加

console.log(e.which) 
console.log(e.target) 

你會請注意,當您單擊並在選擇下拉列表處於活動狀態時按下鍵盤時,您將無法獲得keydown事件。

這將使你的

$(document).on("keydown", $('select'), function (e) { 
    if (e.which === 8) { 
     e.preventDefault(); 
    } 
}); 
+1

嗯,我注意到我的代碼只有在選擇處於活動狀態時才起作用,而它是專注的,但它需要關閉。我意識到它不工作,而選擇打開.. –

+0

我已經嘗試過。它沒有幫助。正如我所說的,我的代碼在關閉下拉菜單時適用於選擇。問題是何時打開下拉菜單。同樣的問題在於你的建議。 – Silko

相關問題