2015-07-01 5 views
5

Ich versuche zu verhindern, dass die Rücktaste in jedem Browser eine Seite zurückgeht. Denn jetzt verwende ich diesen Code:jquery Dropdown auswählen ignoriert Keydown-Ereignis, wenn es geöffnet ist?

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

Es funktioniert gut für alles, außer wenn ein Auswahlfeld Dropdown-Liste geöffnet wird, wird dieses Ereignis ignoriert und eine Backspace nimmt mir eine Seite zurück sowieso. Wie kann ich dieses Problem lösen? Danke für deine Antworten.

Antwort

2

Nur für die Info machen, das ist Google Chrome spezifisch, da der Code in IE und FF funktioniert gut.

Wenn Sie dies wirklich brauchen, können Sie ein gefälschtes Dropdown-Menü rendern und programmgesteuert auswählen.

Sie können die Größe des Drop-Down ändern zu erscheinen, als es war offen, so etwas wie diese: 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(); 
}); 

Abgesehen davon glaube ich nicht, dass Sie alles tun können, da Chrome Ereignisse Brennen nicht, wenn Dropdown ist geöffnet.

+1

Sieht aus, als wäre es ein Bug in Chrome. Ich habe es gemeldet. Danke für Ihre Hilfe. – Silko

+0

Coole Technik, um 'Größe' zu ​​ändern, obwohl es leider Tastaturnavigation bricht ... –

+1

Sie könnten zusätzliche Ereignisse auf Schlüssel auf/ab implementieren, um die gleiche Logik zu reproduzieren, etwas wie dieses fidle: https://jsfiddle.net/yzr2cmqv /15/ – Shark4109

-2

Fügen Sie einfach den select Tag zu Ihren Wählern:

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

Sie haben meine Frage nicht verstanden. Was du getan hast, macht es noch schlimmer. Das Standardereignis in select ist die Seite zurück und wenn ich es dort hinzufüge, wo Sie es vorschlagen, wird es auch bei geschlossenem Dropdown nicht funktionieren. – Silko

-2

Sie werden für keydown Ereignis auf $ überprüfen (Auswahl), gerade jetzt, wenn Sie

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

hinzugefügt werden Sie Beachten Sie, dass Sie das Keydown-Ereignis nicht erhalten, wenn Sie auf klicken und die Tastatur drücken, während das Auswahl-Dropdown aktiv ist.

Dieses es für Ihre

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

hmm, ich habe bemerkt, dass mein Code nur funktioniert, wenn die Auswahl aktiv ist, während sie fokussiert ist, aber sie muss geschlossen werden. Ich merkte, dass es nicht funktioniert, während die Auswahl geöffnet ist. –

+0

habe ich schon ausprobiert. Es hilft nicht. Wie gesagt, mein Code funktioniert für Select, wenn ein Dropdown geschlossen ist. Das Problem ist, wenn ein Dropdown geöffnet ist. Und das gleiche Problem ist in Ihrem Vorschlag. – Silko

Verwandte Themen