Javascript 如何将按钮置于关闭状态?
假设我有一个按钮,当有人点击它时,它会进入关闭状态,但在释放鼠标之前Javascript 如何将按钮置于关闭状态?,javascript,html,Javascript,Html,假设我有一个按钮,当有人点击它时,它会进入关闭状态,但在释放鼠标之前 现在假设有人按下“a”键,我希望按钮进入向下状态,直到按键被释放,此时它被触发。这是可能的吗?下面是一个JSFIDEL,它展示了如何使用jQuery完成此操作: 重要的部分是: $("#textInput").keydown(function(event) { var charCodeFor_a = 65; if ( event.which == charCodeFor_a ) { // "c
现在假设有人按下“a”键,我希望按钮进入向下状态,直到按键被释放,此时它被触发。这是可能的吗?下面是一个JSFIDEL,它展示了如何使用jQuery完成此操作: 重要的部分是:
$("#textInput").keydown(function(event) {
var charCodeFor_a = 65;
if ( event.which == charCodeFor_a ) {
// "click" on the button
$('#button').mousedown();
// make the button look "clicked"
$('#button').addClass('fakeButtonDown');
// do some stuff here...
// release the button later using $('#button').mousedown();
}
});
在输入字段中输入“a”时触发按钮事件。但是正如马克指出的,你需要为点击的按钮伪造样式,因为浏览器不这样做
编辑:我不确定您是否在项目中使用jQuery。我只是想证明这是可能的。如果可以用jQuery库来完成,还有一种方法可以用纯javascript来完成 在做了一些研究之后,我得到了最后的答案: 您可以使用
keyup
和keydown
在按钮元素上触发mousedown
或mouseup
事件
如果您的按钮被编程为根据这些事件改变其样式,那么您就可以开始了
请参见此小提琴示例:
请注意,如果您使用jQuery的UI组件,那么它将无法正常工作。但对于标准按钮,您无法使用javascript将其移动到按下状态
html:
按“A”将我移动到按下状态
Javascript:
<script>
$( "#jQbutton" ).button();
$(document).keydown(function(event) {
if ((event.keyCode === 97)||(event.keyCode === 65))
$("#jQbutton").mousedown();
});
$(document).keyup(function(event) {
if ((event.keyCode === 97)||(event.keyCode === 65))
$("#jQbutton").mouseup();
});
</script>
$(“#jQbutton”).button();
$(文档).keydown(函数(事件){
如果((event.keyCode==97)| |(event.keyCode==65))
$(“#jQbutton”).mousedown();
});
$(文档).keyup(函数(事件){
如果((event.keyCode==97)| |(event.keyCode==65))
$(“#jQbutton”).mouseup();
});
编辑:
<button id="test">Test Button</button>
Selected: <span class="selected" id="out"></span>
$('#test').click(function () {
fn_up();
});
fn_down = function(event){
$('#test').css("opacity", 0.5);
$('#test').focus();
event.preventDefault();
}
fn_up = function(event){
$('#test').css("opacity", 1);
$('#out').append(" test");
event.preventDefault();
}
//to bind the event to the 'a' key
$(document).bind('keydown','a', fn_down);
$(document).bind('keyup','a', fn_up);
//to get the same effect with the 'space' key
$(document).bind('keydown','space', fn);
$(document).bind('keyup','space', fn2);
我们可能会利用一个黑客:
对按钮元素使用accesskey
,然后尝试模拟accesskey按下(我不确定是否可能)
这就是我目前所处的位置
编辑2:
因此,深入研究这一主题,我发现以下几点:
<button id="test">Test Button</button>
Selected: <span class="selected" id="out"></span>
$('#test').click(function () {
fn_up();
});
fn_down = function(event){
$('#test').css("opacity", 0.5);
$('#test').focus();
event.preventDefault();
}
fn_up = function(event){
$('#test').css("opacity", 1);
$('#out').append(" test");
event.preventDefault();
}
//to bind the event to the 'a' key
$(document).bind('keydown','a', fn_down);
$(document).bind('keyup','a', fn_up);
//to get the same effect with the 'space' key
$(document).bind('keydown','space', fn);
$(document).bind('keyup','space', fn2);
在小提琴中,我将其应用于空格键和鼠标向下/向上,以实现与所有事件相同的效果(但您可以使用“a”键…这是一个品味问题)。有趣…不确定这是否可行;可能需要使用图像或样式来伪造。添加一个KeyListener。按下某个键时,将其添加到当前按下的键的数组中。释放后,将其从阵列中移除。使用该数组检查按下了哪些键。@Casebash,要清除。。。你的意思是你想要一个可视的按钮,当你按下“a”时,它看起来像被按下了,然后当你释放“a”时,它看起来像被释放了,然后触发按钮想要做的任何事情吗?@archil使用自定义css这当然是孩子们玩的;-)相关:+1;这个问题的最佳解决方案。不管怎样,这里有一个稍微优化的代码版本,它是否能在FF和Chrome中正常工作。当我按下默认按钮时,默认按钮不会发生任何变化。但是jQuery UI按钮正在改变样式。@kiranvj这不适用于仅适用于jQuery的默认按钮。。这就是答案。。目前还没有选项来模拟默认按钮的按下状态,因为它们是由操作系统呈现的,而不是由浏览器呈现的,但我正试图找到一种可以利用accesskey并模拟require按键的方法。当我在输入字段中键入“a”时,按钮会“向下”,它没有返回是的,我只是添加了他鼠标下降事件,因为这是你要求的您也可以轻松地添加.mouseup()事件。+1这是一个巧妙的技巧。。这不是一个真正的“按下按钮”风格,但它仍然提供了所需的UI反馈。谢谢。是的-由于不一致的按钮向下重新编码,不可能实现更好的cros平台效果。不透明度0.5通常是按钮上的默认“禁用”效果,但我一直在使用它来模拟按钮而不是复选框或收音机时的按下状态:我认为它几乎与我们可以得到的一样好。而不是降低不透明度并使默认按钮变亮,您还可以使用
filter:brightnes(75%)
或类似的方法将按钮变暗[我认为可能需要供应商前缀(如-moz-和-webkit-)]