Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从此函数调用返回值?_Javascript_Jquery_Css_Dom - Fatal编程技术网

Javascript 如何从此函数调用返回值?

Javascript 如何从此函数调用返回值?,javascript,jquery,css,dom,Javascript,Jquery,Css,Dom,我有一个函数来获取图像尺寸。我从createObjectURL发送返回 它可以很好地获取维度,但我无法获取值。我试图得到这两个值,但问题似乎是函数中有一个函数。外部函数不知道内部函数中设置的值。当我硬编码一个值时,如在“qq”下面就可以了。因此,我可以看到问题不在回报中,而在价值观中 在这种情况下,您如何读取值 imgSrc = window.URL.createObjectURL(this.files[0]); var imgSize = getImgSize(imgSrc); var ne

我有一个函数来获取图像尺寸。我从createObjectURL发送返回

它可以很好地获取维度,但我无法获取值。我试图得到这两个值,但问题似乎是函数中有一个函数。外部函数不知道内部函数中设置的值。当我硬编码一个值时,如在“qq”下面就可以了。因此,我可以看到问题不在回报中,而在价值观中

在这种情况下,您如何读取值

imgSrc = window.URL.createObjectURL(this.files[0]);

var imgSize = getImgSize(imgSrc);
var newWidth = imgSize.retWidth;
var newHeight = imgSize.retHeight;

alert(newWidth);
alert(newHeight);

function getImgSize(imgSrc) {
  var newImg = new Image();

  newImg.onload = function() {
    var nHeight = newImg.height;
    var nWidth = newImg.width;

    //alert('The image size is ' + width + '*' + height);
  }

  newImg.src = imgSrc; //this must be done AFTER setting onload

  return {
    retWidth: nWidth,
    retHeight: 'qq'
  };
}

您无法取回它们,因为
.onload
是异步的。处理此问题的最简单方法是从加载处理程序内部调用函数

function getImage(){
  var imgSrc = window.URL.createObjectURL(this.files[0]);
  getImgSize(imgSrc,useImgSize);
}

function getImgSize(src,fn){
  var img=new Image();
  img.onload=function(){
    fn({width:img.width,height:img.height});
  }
  img.src=src;
}

function useImgSize(dimensions){
  alert(dimensions.width);
  alert(dimensions.height);
}

在这里,我为流程的每个步骤使用一个函数。您已经启动了getImage进程。然后调用一个实用函数,该函数将图像源和回调函数作为参数(您可以直接调用useImgSize函数,但回调允许您将实用函数用于多种用途)。最后,您可以在useImgSize函数中对维度执行任何操作。

您的变量
nHeight
nWidth
仅存在于
onload
函数的范围内,请参见下面的答案。您可以使用
Promise
,请参见,因此我在加载处理程序的nextStep中添加了一个函数,但是nextStep做了什么?我会将值传递给该函数,但我仍在调用getImageSize…而不是nextStep。。。它正在接收值。我有点困惑。。。好的,非常困惑。我需要出去一会儿,但稍后会更仔细地看这个。我真的很感谢你的反馈。所以,有点不好意思承认我还是不明白。但是我把代码放进去,它就工作了。我可以通过useImageSize函数访问高度和宽度。我希望从main部分(在本例中是getImg)访问这些值,这样我就可以调用例程来获取不同原因的大小,并对其执行不同的操作。在这种情况下,我想我需要做任何需要useImageSize维度的任务,而不是主要过程,对吗?是的,也许把useImageSize作为主要功能,把其他两个仅仅作为帮助来实现。好的。这很有效。不过,很难将图像大小用于其他用途。因为useImageSize不是我的主要功能。例如,我计划也调用一个模态,我还需要图像大小。但我相信我能解决这个问题。我想我的下一期,也是最后一期。等待图像完全加载,然后删除“正在加载”消息。如果你有任何想法,我喜欢你的意见。我真的迷路了。延迟和承诺完全让我困惑: