2015-10-20 122 views
0

我使用的Javascript從另一個以下剪斷SO回答:嘗試訪問的功能外變量在Javascript

var _URL = window.URL || window.webkitURL; 
$("#file").change(function (e) { 
    var file, img; 
    if ((file = this.files[0])) { 
     img = new Image(); 
     img.onload = function() { 
      alert(this.width + " " + this.height); 
     }; 
     img.src = _URL.createObjectURL(file); 
    } 
}); 

我無法弄清楚如何獲得訪問這些this.width和this.height變量功能之外。我已將它們設置爲等於現有變量,並且變量始終爲0或爲空。

+0

外面在哪裏?他們不會給你想要的值,直到圖像被加載,因此'onload'處理程序,我敢肯定你需要將圖像添加到DOM加載。 – 2015-10-20 15:52:33

+0

創建一個'全局變量'並在其中分配'this.width'和'this.height'。 :P –

+0

'this'是指正在加載的圖像對象。 'onload'函數是異步執行的。 –

回答

3

它只是使它們在函數外部可用,因爲你永遠不會真正知道發生的負載,所以它並不是真的有用。你想要一個回調,在適當的時候使用這些值。

var _URL = window.URL || window.webkitURL; 
$("#file").change(function (e) { 
    var file, img; 
    if ((file = this.files[0])) { 
     img = new Image(); 
     img.onload = function() { 
      someCallback(this.width, this.height); 
     }; 
     img.src = _URL.createObjectURL(file); 
    } 
}); 

function someCallback (width, height) { 
    // use those values 
} 

是的,你可以使用全局變量,但我再次指出,已填充這些值時,你不會知道,可能在你的代碼的問題結束了。

+3

也有問題,如果你最終得到一大堆值,你將傳遞給回調只是使他們是一個對象並傳遞該對象。值= {width:this.width,height:this.height}等 –

+1

這個很好用!謝謝! – dmikester1

+0

@ dmikester1你很受歡迎! – AtheistP3ace

0

你也可以做這樣的事情

var _URL = window.URL || window.webkitURL; 
var width=""; 
var height=""; 
$("#file").change(function (e) { 
    var file, img; 
    if ((file = this.files[0])) { 
     img = new Image(); 
     img.onload = function() { 
      width=this.width; 
      height=this.height; 
     }; 
     img.src = _URL.createObjectURL(file); 
    } 
}); 

現在你可以使用heightwidth變出你的改變事件的一側。現在這兩個變量都是全局變量

+0

我試過這樣做,寬度和高度總是0/null /空白。 – dmikester1

+0

@ dmikester1請按照此鏈接http://stackoverflow.com/a/4862268/2798643和http://stackoverflow.com/a/5786899/2798643它可能對您有所幫助。 –