【问题标题】:How to trigger key combo with jQuery如何使用 jQuery 触发组合键
【发布时间】:2010-10-08 18:43:32
【问题描述】:

我已经编写了一些代码:

http://fincha.com/kunden/schmitt/

我用 .css("zoom") 放大,但我需要按钮来模拟 CTRL +CTRL -

此代码对我不起作用:

e = jQuery.Event("keydown");        
e.which = 50;       
$("input").trigger(e);

请帮忙!

编辑

我实际上想要zoom-inzoom-out 整个网页,而不仅仅是一个输入字段。

【问题讨论】:

    标签: javascript jquery keydown


    【解决方案1】:

    jQuery 通过在event 对象上设置一个或多个属性来规范化事件的修饰键。所以,你想将event.ctrlKey 设置为true,所以这应该适合你:

    e = jQuery.Event("keydown");        
    e.which = 50;
    e.ctrlKey = true;
    $("input").trigger(e);
    

    但是,根据来源处的评论(链接如下):

    您不能轻易更改事件对象中的值(可能出于安全原因)。

    所以,如果你在构造Event对象后无法设置事件的属性,那么你可以$.extend()它来设置ctrlKey属性:

    e = jQuery.Event("keydown");
    fake = $.extend({}, e, {which: 50, ctrlKey: true});
    $("input").trigger(fake);
    

    另一件事:我不确定您是否尝试将密钥代码 50 用于 +- 键。也许您是,并且您使用的是不同的键盘布局,但根据this demo50 是用于点击 2 的 JavaScript 键代码 - 所以这也可能是您的问题的一部分。


    来源:comments on a jQuery API page


    编辑:

    除此之外,我不认为您可以实际上使用 JavaScript 更改浏览器的缩放级别,即使您正在“发送”键盘命令来这样做。

    Access browser's page zoom controls with javascript

    【讨论】:

    • 谢谢你的回复,你说得对,没有办法面对这样的热键
    【解决方案2】:

    来源:http://www.scottklarr.com/topic/126/how-to-create-ctrl-key-shortcuts-in-javascript/

    var isCtrl = false;
    
    $(document).keyup(function (e) {
        if(e.which == 17) isCtrl=false;
    }).keydown(function (e) {
        if(e.which == 17) isCtrl=true;
        if(e.which == 83 && isCtrl == true) {
            //run code for CTRL+S -- ie, save!
            return false;
        }
    });
    

    这是用于Ctrl+s的,但你应该可以很容易地修改它。

    【讨论】:

    • 这不是我不会的。我需要通过单击链接来模拟 CTRL +
    • 哦!对不起,我误解了这个问题!
    • 我意识到这对 OP 来说不是一个好的答案,但我需要为我自己的问题提供准确的解决方案,所以谢谢!
    • 你不能使用target="_blank"然后点击它吗?
    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    相关资源
    最近更新 更多