2014-01-06 48 views
0

我想写一个代码来绑定单击事件的另存为选项。我不想使用filesaver.js。我想要纯JavaScript来编写这段代码。是否有可能在javascript中点击事件绑定ctrl + s?

+1

http://stackoverflow.com/questions/93695/best-cross-browser-method-to-capture-ctrls-with-jquery – Vivek

+0

是的,这是可能的和很多的应用程序这样做......不幸的是,他们不对于mac用户,不支持command + s:P – FaddishWorm

+1

@Vivek就我所能说的这个问题而言,问的是与你链接的相反 - 并不是如何捕获ctrl + s键盘事件,而是触发ctrl + s/save -as命令的方法_other_比键盘/应用程序菜单方法 –

回答

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

+0

我认为这是错误的方法。在鼠标事件中,应该发射这些关键事件而不是其他方式。 – Christoph

1

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

一旦你有saveAs()的实现,只需将其连接到任何事件触发你喜欢:

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

澄清:每W3C spec上活动作为,所有不受信任的事件(包括按键事件)就好像event.preventDefault()被称为 - 所以有明确无法模拟实际ctrl + s按键 - 只有方式来模拟其影响。

相关问题