2013-05-31 53 views
1

你好我正在使用JavaScript上的File API做我的第一個項目,它是一個簡單的程序,它將一個文件作爲輸入並在Div上顯示它的內部代碼。 我想知道是否有一種方法可以在沒有事件監聽器和事件處理程序的情況下運行此代碼。 我認爲這是主要的問題,但我無法弄清楚它是如何工作:使用沒有事件偵聽器的readAsBinaryString()

document.getElementById('byte_content').textContent = reader.readAsBinaryString(blob); 

所有MI代碼是在這裏:

<!DOCTYPE html> 
<head> 
<html> 
<script> 
function convert(){ 
var files = document.getElementById('input').files; 
file = files[0]; 
var reader = new FileReader(); 
var blob = file.slice(0,20); 
    document.getElementById('byte_content').textContent = reader.readAsBinaryString(blob); 
} 
</script> 
</head> 
<body> 

<input type="file" id="input" name="file" /> 

<button onclick=convert()>Run script</button> 

<div id="byte_range"></div> 

</body> 

我見過幾個例子一樣this one但所有的他們使用類似這樣的代碼:

event.target.result 

回答

1

你不能。 FileReader異步讀取文件。這意味着閱讀在後臺進行,並在未來某個未指定的時間點結束;它確實不立即返回結果。檢索結果的唯一方法是在事件結束時收聽事件並執行您想要執行的代碼,然後。這根本不是問題,只需要將代碼放在回調/事件處理程序函數中,而不是在調用readAsBinaryString之後的程序中。

相反的:

document.getElementById('byte_content').textContent = reader.readAsBinaryString(blob); 

你這樣做:

reader.onload = function (event) { 
    document.getElementById('byte_content').textContent = event.target.result; 
}; 
reader.readAsBinaryString(blob); 

這一切就是這麼簡單。

+0

非常感謝! 我工作,因爲我看到還有很多我必須學習JavaScript,然後統治世界:) – Andres