Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器中不可见元素上的键盘快捷键_Javascript_Css_Keyboard_Markup - Fatal编程技术网

Javascript 浏览器中不可见元素上的键盘快捷键

Javascript 浏览器中不可见元素上的键盘快捷键,javascript,css,keyboard,markup,Javascript,Css,Keyboard,Markup,我想为页面上的按钮指定键盘快捷键 事实证明,在标记中直接执行会导致危险的副作用:即使按钮不可见,快捷方式也会触发单击事件 我可以在前端控制器中使用动态设置/取消设置快捷方式,但这似乎有点困难。有没有更优雅的方法?非常感谢 你应该可以做这样的事情 var shortcuts = { 49: document.getElementById("button"), //character "1" 50: document.getElementById("button2") //chara

我想为页面上的按钮指定键盘快捷键

事实证明,在标记中直接执行会导致危险的副作用:即使按钮不可见,快捷方式也会触发单击事件


我可以在前端控制器中使用动态设置/取消设置快捷方式,但这似乎有点困难。有没有更优雅的方法?非常感谢

你应该可以做这样的事情

var shortcuts = {
    49: document.getElementById("button"), //character "1"
    50: document.getElementById("button2") //character "2"
};

var isVisible = function(el) {
    return !(el.style.display === "none" || el.style.visibility === "hidden");
};

var bindEvent = function(el, event, handler) {
  if (el.addEventListener){
    el.addEventListener(event, handler, false); 
  } else if (el.attachEvent){
    el.attachEvent('on'+event, handler);
  }
};

bindEvent(window, "keydown", function(e) {
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    if(typeof shortcuts[charCode] !== "undefined" && shortcuts[charCode] && isVisible(shortcuts[charCode])) {
        shortcuts[charCode].click();
    }
});

我最终完成了如下所示的操作,这正是我想要的:隐藏按钮的快捷方式不起作用,但可见按钮的快捷方式起作用

<head>

    $(document).ready(function () {
         var self = 'document_ready';
         assignListeners();
     });

    var assignListeners = function() {
        $('#btn1').on('click', function(){
            if ($(this).css('display') != 'none')
                realListener1();
        });
        $('#btn2').on('click', function() {
            if ($(this).css('display') != 'none') {
                realListener2();
            }
        });
    };


    var realListener1 = function() {
        alert('Button 1 clicked')
    };
    var realListener2 = function() {
        alert('Button 2 clicked')
    };


</head>
<body style="margin:0; padding:0;">
<div>
<button id="btn1" accesskey="Z" style="display: none;">Button 1</button>
<button id="btn2" accesskey="X" >Button 2</button>
</div>

</body>

$(文档).ready(函数(){
var self=‘文件准备就绪’;
赋值侦听器();
});
var assignListeners=函数(){
$('#btn1')。在('click',function()上{
if($(this.css('display')!='none')
realListener1();
});
$('#btn2')。在('click',function()上{
if($(this.css('display')!='none'){
realListener2();
}
});
};
var realListener1=函数(){
警报('单击按钮1')
};
var realListener2=函数(){
警报('按钮2已单击')
};
按钮1
按钮2

请展示您所拥有的示例。我会坚持取消快捷方式。@Taylor我的按钮。。。加载页面时,按+M键将触发警报窗口。@Alex-请用该代码更新您的问题我不知道可以将数值添加为对象属性键。谢谢如果你喜欢的话可以使用数组。此外,您还可以通过按checkmark@Nile我不能按原样使用你的小提琴,它不能设置/取消设置快捷方式。另外,您能否详细说明如何使用您的解决方案来实现“常规”快捷方式,即+?通过使用css
display:none
visibility:hidden
隐藏元素,您已自动取消设置快捷方式。