2017-04-02 153 views
0

我试图让图像的宽度和从函数返回的高度,但每次得到的时间的返回不确定的,如果我在它显示功能CONSOLE.LOG值,但它每次都返回undefined。函数返回的对象,但它返回未定义

主要问题,我怀疑是有范围的,因为它是一个嵌套函数,但我真的不知道,如果多数民众赞成的情况下。

JS代码

//get image width and height 
    $(document).ready(function(){ 
     //object method 
     function dimensions($width, $height){ 
     this.getWidth = $width; 
     this.getHeight = $height; 
     } 
     //gets image data 
     function readURL(input) { 
      var reader = new FileReader(); 
      var image = new Image(); 
      reader.onload = function (e) { 
      image.src = e.target.result; 
      } 
      reader.readAsDataURL(input.files[0]); 
      return image; 
     } 
     //gets image dimensions (width height) 
     function getImageDimensions($img){ 
     var $dimensions; 
      $img.onload = function(){ 
      $dimensions = new dimensions($img.width, $img.height); 
     } 
      return $dimensions; 
     } 

    $("#imgInp").change(function(){ 
    alert(getImageDimensions(readURL(this))); 
    }); 
    }); 

HTML代码

<form id="form1" runat="server"> 
    <input type='file' id="imgInp" accept="image/*"/> 
    </form> 

谁能向我解释为什么它不返回一个对象,但是返回undefined?

回答

0

那是因为你的图像不具有宽度或高度,直到它在DOM渲染。 所以,你有权把instanciation在onload处理。 的事情是,处理器被触发,只有当你的图像加载,但在此之前你执行回线。 换句话说,你这个功能

$img.onload = function(){ 
     $dimensions = new dimensions($img.width, $img.height); 
    } 

前执行这条线

return $dimensions; 

把这样在$ img.onload返回:

$img.onload = function(){ 
     return new dimensions($img.width, $img.height); 
     } 
+0

如果我把警报在$ IMG。宽度和$ img.height getImageDimensions($ img)函数图像宽度和高度得到警报。 – mulvikciks

+0

是的,我编辑我的回答 –

+0

它仍然出于某种原因返回undefined。 – mulvikciks