是否有可能在javascript中的点击事件上绑定ctrl + s?

时间:2014-01-06 11:31:55

标签: javascript

我正在尝试编写一个代码来绑定click事件上的save as选项。我不想使用filesaver.js。我想要纯JavaScript来编写这段代码。

2 个答案:

答案 0 :(得分:1)

HTML5标准引入了File API,它应该允许脚本提供“文件”(Blob)供用户保存。然而,支持是伪劣的,这就是为什么存在像FileSaver.js这样的polyfill。 Filesaver.js也是“纯粹的”javascript,所以我不确定为什么需要一个纯粹的javascript解决方案来排除它的使用(除非你的意思是你不能加载外部脚本 - 只需缩小和内联它(以及许可证等)。 ))现在,如果您必须自己编写代码,那么您提出的任何跨浏览器解决方案都可能是对polyfil的有效重写。

一旦实现saveAs(),只需将其附加到您喜欢的任何事件触发器上:

myButton.addEventListener( 'click', function() { window.saveAs( fileBlob, 'filename.txt' ) } );

澄清:根据活动上的W3C spec,所有不受信任的事件(包括按键事件)就像调用了event.preventDefault()一样 - 所以有显式无法模拟实际的 ctrl + s 按键 - 只能模拟其效果。

答案 1 :(得分:0)

你可以这样做:

var isCtrlPressed = false;

function onKeyDown(event) {
    if (event.keyCode == 17) { // Control got pressed
        isCtrlPressed = true;
    }
    if (event.keyCode == 83) { // "s" got pressed
        // if control is pressed too execute some code
        if (isCtrlPressed) {
            // Your code here
        }
    }
}

function onKeyUp(event) {
    if (event.keyCode == 17) { // Control got pressed
        isCtrlPressed = false;
    }
}

然后在您的身体标签上添加以下事件:

<body onkeydown="onKeyDown(event)" onkeyup="onKeyUp(event)">
</body>

您可以在此处找到lifedemo: http://jsbin.com/eBIRAfA/1/edit