【问题标题】:Call JS function after paste keyboard shortcut?粘贴键盘快捷键后调用JS函数?
【发布时间】:2023-08-08 16:09:01
【问题描述】:

我正在尝试编写一个简单的脚本,该脚本将获取我需要保存的 url 列表,将它们附加到数组中,然后将该数组返回到 div 中。我遇到的问题是我正在使用“.onKeyUp”来调用该函数。它可以工作,但是当我使用 ctrl + v 粘贴时,该函数被调用了两次。释放字母 v 时一次,释放控制权时一次。如何修复它,以便在我使用键盘快捷键时它只会调用一次该函数?这是我的代码:

<script type="text/javascript">
    var arr = new Array();
    function procession() {
        var urlin = document.getElementById('url').value;
        var smacky = "<br/> the url is:    " + urlin + "<br/> the url is:    www." + urlin;
        arr.push(smacky);
        document.getElementById('list').innerHTML = arr;
    }
</script>


<form>
    <input onkeyup="procession();" type="text" size="50" id="url"/>
</form>
<div id="list"></div>

重要提示:说来话长,但我不能在这个脚本中使用 jQuery。有没有办法只用纯 javascript 做到这一点?

【问题讨论】:

    标签: javascript function onkeyup


    【解决方案1】:

    event 传递给您的onKeyUp,如果密钥是ctrl,则返回false。这只会为快捷键注册一个 keyup 事件:

    <input onkeyup="procession(event);" type="text" size="50" id="url"/>
    

    JS:

    function procession(e) {
        //if ctrl key, return false
        if (e.which == 17) return false;
    
        //do stuff
        var urlin = document.getElementById('url').value;
        var smacky = "<br/> the url is:    " + urlin + "<br/> the url is:    www." + urlin;
        arr.push(smacky);
        document.getElementById('list').innerHTML = arr;
    }
    

    这有点hack-ish,但它应该可以完成工作。

    【讨论】:

    • 甜蜜!谢谢。那成功了。只要他们允许,我就会接受。
    • 太棒了,很高兴它能满足您的需求!
    • 我猜这对于粘贴会更干净:if (event.keyCode == 86 &amp;&amp; event.ctrlKey)
    【解决方案2】:

    这里:

    $(document).on("paste", function(event) {
      alert("paste!");
    });
    

    【讨论】:

    • 谢谢,但是我不能用 jQuery 来做这个……我怎么能用 javascript 来做呢?
    • 糟糕,抱歉。好吧,在这种情况下,您必须编写自己的跨浏览器 EventListener:这里有一些信息 quirksmode.org/dom/events/cutcopypaste.html