【问题标题】:How to trigger pressing of key along with shift key in jQuery?如何在jQuery中触发按键和shift键?
【发布时间】:2012-09-10 07:50:19
【问题描述】:

好的,在将其标记为重复之前,请阅读标题。

我知道你可以这样做:

var triggerevent = jQuery.Event("keypress");
triggerevent.which = 52; // 4
$("#inputfield").trigger(triggerevent);

但是,例如,如果我想触发按下“$”符号怎么办?如果不事先按 shift,您将无法做到这一点。

这怎么可能?

【问题讨论】:

  • 获取key的id并使用e.shiftKey:stackoverflow.com/questions/11468644/…
  • @Simon 你能把它放在答案中吗?
  • 它说:“琐碎的答案转换为评论” ...
  • 无论如何我可能误读了您的问题,您不想将物理按键与 shift 一起注册,而是在 jQuery 中触发 shift+keypress?
  • @Simon 是的,就像写 $: shift + 4,我不知道这到底属于什么

标签: jquery html keypress


【解决方案1】:
var triggerevent = jQuery.Event("keypress");
triggerevent.which = 36; // $

$("#textarea").on('keypress', function(e) {
    if(!e.hasOwnProperty('originalEvent')) {
        var c = String.fromCharCode(e.which); // $
        this.value = c;
    }
}).trigger(triggerevent);

jsfiddle

更新:以编程方式插入字符,检查是否发生物理按键

更新 2: 删除了整个 shiftKey,因为不再重要了

【讨论】:

  • 当然:jsfiddle.net/26ru6,检查我登录到控制台的事件对象,你会看到“shiftKey”是插件读出的一个简单属性(就像我第一个评论),所以没有魔法。
  • 那为什么这不起作用:jsfiddle.net/rGdUf/1?它应该有效,不是吗?
  • 我不明白,它确实有效,事件被触发,除此之外你希望它做什么?
  • 不应该也将它插入到textarea中吗?我不知道。
  • 由于它是您的“自定义”事件,它不会执行字符的实际插入,如果您在小提琴中打开控制台并在 textarea 中键入一个字符,您会看到事件对象,在按键上触发的事件有一个属性“originalEvent”,它表示前面提到的按键的物理按下......你无法模拟它(参见trigger keypress events)。我以为你只是想触发事件以便插件或外部代码可以抓取它?
【解决方案2】:

由于 jQuery 中的事件对象是从原生 DOM 事件派生的,因此您可以使用这些属性来检查按下了哪个组合。

DOM W3 Reference(查看属性部分)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2021-10-30
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    相关资源
    最近更新 更多