【问题标题】:Detecting the Shift + Enter keyboard combination in an textarea element [duplicate]检测文本区域元素中的 Shift + Enter 键盘组合[重复]
【发布时间】:2020-11-10 18:55:35
【问题描述】:

this question 之后,我想检测textarea 元素中的 Shift + Enter 键盘组合。考虑下面的代码块:

<!DOCTYPE html>
<html lang="en">

<head>

    <meta http-equiv="x-ua-compatible" content="ie=9" />
    <title>test</title>

    <HTA:APPLICATION APPLICATIONNAME="test" />

    <style type="text/css">
        textarea {
            resize: none;
            overflow: auto;
            min-height: 50px;
            max-height: 200px;
            width: 100%;
        }
    </style>

    <script language="javascript">
        function auto_grow(element) {
            element.style.height = "5px";
            element.style.height = (element.scrollHeight) + "px";
        }
    </script>

    <SCRIPT Language="VBScript">
        Sub onkeydown_script()
        If window.event.Keycode = 16 Then
        Msgbox "You pressed the Shift key."
        End If
        End Sub
    </SCRIPT>

</head>

<body>

    <textarea oninput="auto_grow(this)" onkeydown="onkeydown_script()" onkeyup="onkeyup_script()" wrap="off"></textarea>

</body>

</html>

我在onkeydown 事件中尝试检测 Shift 并且失败了。如果您能帮助我了解检测 Shift + Enter 键盘组合的规范方法,我将不胜感激。

P.S.1. 任何其他改进上述代码的建议也非常感谢。

P.S.2. 解决方案不必在 VBScript 中。事实上,JScript 解决方案甚至更好,因为这是我更好理解的语言。

P.S.3. 如果阅读这篇文章的人认为 JScript 和 JavaScript 是相似但不相同的语言,我将不胜感激。 Samwise HTA 本身不是传统的 HTML 文档。此处未标记 HTML 和 JavaScript,因此请考虑一下。

P.S.4. 恕我直言,规范的解决方案应该是使用特定的Keycode 作为键盘组合,或者应该有一个全局变量来指示 Shift,或者如果这样的预定义变量不存在,我们可以自己定义一个。我尝试了this pagethis page 中的shiftKey 属性,似乎都不起作用。

P.S.5. 令人惊讶的是,this page 上的示例运行良好。

P.S.6. 遗憾的是,这篇文章已被标记为与this one 重复,所以在这里我将解释为什么这个决定是不公正的:

  • 不是一键组合而是一键,比较简单
  • 这些帖子是 VBScript 专有的,而我的也包括 JScript
  • 最后,帖子没有接受的答案

更多信息here

【问题讨论】:

标签: vbscript jscript hta


【解决方案1】:

如果你想要一个返回 msgBox 的代码,如果你使用 shift + enter 那么这是一个有效的代码。

 <!DOCTYPE html>
<html lang="en">

<head>

    <meta http-equiv="x-ua-compatible" content="ie=9" />
    <title>test</title>

    <HTA:APPLICATION APPLICATIONNAME="test" />

    <style type="text/css">
        textarea {
            resize: none;
            overflow: auto;
            min-height: 50px;
            max-height: 200px;
            width: 100%;
        }
    </style>

    <script language="javascript">
        function auto_grow(element) {
            element.style.height = "5px";
            element.style.height = (element.scrollHeight) + "px";
        }
    </script>

    <SCRIPT Language="VBScript">
        Sub onkeydown_script()
        If window.event.Keycode = 16 and 13 Then
        Msgbox "You pressed the Shift and Enter key."
        End If
        End Sub
    </SCRIPT>

</head>

<body>

    <textarea oninput="auto_grow(this)" onkeypress="onkeydown_script()" onkeyup="onkeydown_script()" wrap="off"></textarea>

</body>

</html>

【讨论】:

  • 好吧,Msgbox 当然是一个用于测试和演示功能的虚拟功能。您确定这是执行此操作的规范方法吗?
  • 在这种情况下,我的意思是传统的或标准的。
  • 它可能不规范,但它是最基本的方式。它基本上是你的代码,只添加了 2-3 个。
  • Hackoo 可能会给你一个很好的建议。
【解决方案2】:

好的,我想我找到了一个“规范”的解决方案。我修改了this page的例子:

<html>

<head>
    <title>shiftKey example</title>

    <script type="text/javascript">

        function showChar(e) {
            alert(
                "charCode: " + e.keyCode + "\n"
                + "Shift key pressed: " + e.shiftKey + "\n"
                + "Alt key pressed: " + e.altKey + "\n"
                + "Ctrl key pressed: " + e.ctrlKey + "\n"
            );
        }

    </script>
</head>

<body onkeypress="showChar(event);">
    <p>Press any character key, with or without holding down <br />
        the <kbd>Shift</kbd> key.<br />
        the <kbd>Alt</kbd> key.<br />
        the <kbd>Ctrl</kbd> key.<br />
        or a combination of those.</p>
</body>

</html>

积分:

  • event.keyCode 区分大小写。
  • String.fromCharCode() 不存在。

【讨论】:

  • 另外,不要关注我的代码,因为即使你只输入shift键,msgBox还是会来的。
猜你喜欢
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2011-08-16
相关资源
最近更新 更多