2014-01-06 71 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按鍵 - 只有方式來模擬其影響。

相關問題