Javascript 无法通过

Javascript 无法通过,javascript,jquery,firefox,Javascript,Jquery,Firefox,试图在Firefox上防止默认的按键事件,但无效 有解决办法吗 这一次,即使是IE也能处理,但Firefox却不能 请参见此处的代码: 在Firefox19上,这似乎对我有效。我假设您的目的是防止用户键入值时通过键盘输入更改select值 $(document).ready(function() { var valueToKeep; $("#select").keypress(function (event) { $(this).val(valueToKeep);

试图在Firefox上防止默认的按键事件,但无效

有解决办法吗

这一次,即使是IE也能处理,但Firefox却不能

请参见此处的代码:


在Firefox19上,这似乎对我有效。我假设您的目的是防止用户键入值时通过键盘输入更改select值

$(document).ready(function() {
    var valueToKeep;
    $("#select").keypress(function (event) {
        $(this).val(valueToKeep);
    });
    $("#select").keydown(function (event) {
        event.preventDefault();
        event.stopPropagation();
        valueToKeep = $(this).val();

    });         
});

我假设您不希望在按键时选择其他选项。我相信这是特定于浏览器的实现,不会引发事件。您可能需要做的是使用常规元素和jquery构建自己的select模拟。这可能会变得非常复杂,这取决于你有多疯狂,但这里有一个小的开始

HTML:

JS:

等等等等


另一个选择是使用类似的插件。看看他们都做了些什么。如果删除输入栏,您将获得选择功能,按键不会更改所选选项。

关于按键时的选择更改,请尝试添加实体­;在标签之前


这可能不是最优雅的解决方案,但它确实起到了作用。

这不是很优雅,但很有效:

$("select").keydown(function(e){
    e.preventDefault();
    var elem = this;
    elem.disabled=true;
    setTimeout(function() { elem.disabled = false; }, 0);
});

问候语。

输入?也许你的意思是.focus或.change??你到底想阻止什么?阻止按键事件-例如,当用户输入一个键并选择一个以该键开始的值时。对不起,这不起作用。如果我选择下拉菜单,然后点击“W”,它会选择星期三。预计将停留在周一,无论按什么键,都不会离开。好的。这仅在选项未展开时有效。我会看看我是否能满足这个新的要求。这似乎是一个超过7年的错误:。你也许可以通过元素克隆、绝对定位和一些全方位的JS技巧给人一种错觉。@danronmoon 12年了,但谁在计算…:我使用的是Firefox 55.0.2 32位版本,但在按键下、按键上和按键时仍然可以使用它。这正是我希望避免的——我已经有很多代码绑定到常规选择中,如果下拉菜单不再是常规选择,那么这些代码都必须进行彻底检查。但是选择的的确很好看!我知道你想避免,但我认为你做不到
<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
</head>
<body>

<select id="select">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<script>
// working fine in PC and mobile
$('#select').on('focus', function() {
    $(this).hide();
    setTimeout(function(self) {
        self.show();
    }, 0, $(this))
});
</script>
</body>
</html>
.imitateSelect div{
    display:none;
}
$('.imitateSelect div').first().show();

$('.imitateSelect div').on('click', function(){
    $(this).siblings().slideDown();
});
$("select").keydown(function(e){
    e.preventDefault();
    var elem = this;
    elem.disabled=true;
    setTimeout(function() { elem.disabled = false; }, 0);
});
<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
</head>
<body>

<select id="select">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>

<script>
// working fine in PC and mobile
$('#select').on('focus', function() {
    $(this).hide();
    setTimeout(function(self) {
        self.show();
    }, 0, $(this))
});
</script>
</body>
</html>