2015-07-01 14 views
5

Tôi đang cố gắng ngăn nút lùi để quay lại một trang trong mọi trình duyệt. Để bây giờ tôi đang sử dụng mã này:jquery chọn dropdown bỏ qua sự kiện keydown khi nó được mở?

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

Nó hoạt động tốt cho tất cả mọi thứ trừ khi chọn trường danh sách thả xuống được mở, sự kiện này được bỏ qua và một backspace đưa tôi một trang lại anyway. Làm thế nào tôi có thể giải quyết vấn đề này? Cảm ơn bạn cho câu trả lời của bạn.

Trả lời

2

Chỉ cần cho các thông tin, đây là Google Chrome cụ thể từ mã của bạn hoạt động tốt trong IE và FF.

Nếu bạn thực sự cần điều này để hoạt động, bạn có thể hiển thị menu thả xuống giả và đặt được chọn theo lập trình.

Bạn có thể thay đổi kích thước thả xuống để xuất hiện như nó đã được mở, một cái gì đó như thế này: 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(); 
}); 

Khác hơn là tôi không nghĩ rằng bạn có thể làm bất cứ điều gì từ sự kiện Chrome không bắn khi menu thả xuống đang mở.

+1

Có vẻ như đó là lỗi trong Chrome. Tôi đã báo cáo nó. Cảm ơn sự giúp đỡ của bạn. – Silko

+0

mát kỹ thuật để thay đổi 'size' mặc dù nó không may phá vỡ navigation bàn phím ... –

+1

Bạn có thể thực hiện sự kiện bổ sung về chính lên/xuống, để tái tạo cùng một logic, somethink như fidle này: https://jsfiddle.net/yzr2cmqv/15 / – Shark4109

-2

Chỉ cần thêm thẻ select để chọn của bạn:

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

Bạn không hiểu qustion của tôi. Những gì bạn đã làm cho nó tồi tệ hơn. Sự kiện mặc định trong lựa chọn là trang trở lại và nếu tôi thêm nó vào nơi bạn đề xuất, sự kiện đó sẽ không hoạt động với một trình đơn thả xuống đã đóng. – Silko

-2

Bạn sẽ phải kiểm tra sự kiện KeyDown trên $ (chọn) ngay bây giờ, nếu bạn thêm

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

bạn sẽ lưu ý rằng bạn sẽ không nhận được sự kiện keydown khi bạn nhấp và nhấn bàn phím trong khi menu thả xuống chọn đang hoạt động.

Điều này sẽ làm cho nó cho bạn

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

hmm, tôi nhận thấy rằng mã của tôi chỉ hoạt động nếu chọn được kích hoạt, trong khi nó được tập trung nhưng nó cần phải được đóng lại. Tôi nhận ra nó không hoạt động trong khi lựa chọn được mở ra .. –

+0

Tôi đã thử điều đó. Nó không giúp được gì. Như tôi đã nói, mã của tôi hoạt động để chọn khi một trình đơn thả xuống bị đóng. Vấn đề là khi một trình đơn thả xuống được mở ra. Và cùng một vấn đề là trong đề xuất của bạn. – Silko

Các vấn đề liên quan