javascript出现问题并返回值

javascript出现问题并返回值,javascript,function,Javascript,Function,我想返回window.imgwidth,这样我就可以在其他地方使用它,但如果我试图提醒它或类似的东西,它会显示为空白。如何返回其值。window.imgwidth是我尝试创建全局变量的过程。我不需要窗口的宽度我认为问题是,当执行find\u img\u dm时,您试图立即返回宽度值。这将不起作用,因为img.onload很可能在函数完成执行之前不会被激发 您需要做的是在onload事件处理程序中,调用另一个函数,传入width值,并让该函数在加载图像时执行您需要执行的操作。然后您将知道,此时,图

我想返回window.imgwidth,这样我就可以在其他地方使用它,但如果我试图提醒它或类似的东西,它会显示为空白。如何返回其值。window.imgwidth是我尝试创建全局变量的过程。我不需要窗口的宽度

我认为问题是,当执行find\u img\u dm时,您试图立即返回宽度值。这将不起作用,因为img.onload很可能在函数完成执行之前不会被激发


您需要做的是在onload事件处理程序中,调用另一个函数,传入width值,并让该函数在加载图像时执行您需要执行的操作。然后您将知道,此时,图像已加载,并且宽度值可用

好的,试试这个。必须在函数测试中返回window.imgwidth的值:

function find_image_dm(imgsrc){
    window.imgwidth = ""; 
    var img = new Image();

    img.onload = function test() {
        var width = this.width;
        var height = this.height;

        if (height > 300) {
            var x = height/300;
            window.imgwidth = Math.ceil(width/x);
        }
    }

    img.src = imgsrc;

    return(window.imgwidth);
}

嗯。“这又是一次尝试,”汤姆

据我所见,这里可能有两个问题

  • 如果if语句返回false,则不会计算
    window.imgwidth
    ,因为这似乎是您计算它的唯一位置

  • 正在
    函数测试()中计算
    窗口.imgwidth
    ,但未返回


  • 您尝试的问题是
    onload
    回调异步执行。因此,您无法可靠地
    返回任何内容,因为
    onload
    回调将在将来某个时间执行。与其考虑返回值,不如考虑将回调函数参数传递给
    find\u image\u dm
    函数:

    function find_image_dm(imgsrc){
        window.imgwidth = ""; 
        var img = new Image();
            img.onload = function test() {
            var width =this.width
            var height= this.height;
               if(height > 300){
                   var x = height/300;
                   console.log(Math.ceil(width/x));
                   window.imgwidth = Math.ceil(width/x);
                   console.log(window.imgwidth);
                   alert (window.imgwidth);
                   return window.imgwidth;
               }
            }
    
            img.src = imgsrc;
    }
    
    您可以这样使用:

    function find_image_dm(imgsrc, callback)
    {
        var img = new Image();
    
        img.onload = function()
        {
            callback(this.width, this.height);
        };
    
        img.src = imgsrc;
    }
    

    演示:查看您的代码,问题似乎是您在尝试获取高度之前没有从技术上加载图像,因为您在
    onload
    调用之后设置了
    src

    如果您正在使用jQuery,那么应该尝试并利用它

    function onReturnSize(w, h)
    {
        console.log('image width is', w);
        console.log('image height is', h);
    }
    
    find_image_dm('http://placekitten.com/2200/1200', onReturnSize);
    
    函数查找图像(imgsrc){
    var imgWidth,
    img=$('300){
    var x=高度/300;
    imgWidth=Math.ceil(宽度/x);
    }
    });
    返回imgWidth;
    }
    
    好的。。。我检查了你的代码,发现你的脚本有问题。您使用的是image.onload函数,因此当您加载图像源时,图像加载,然后只有维度可用并存储在window.imgwidth上

    一切正常,但问题是,当您调用函数时,加载u映像需要时间,因此如果您尝试获取window.imgwidth,因为资源仍在加载,您将无法获取window.imgwidth。返回值也将不起作用,因为代码不会等待图像加载,所以尽管图像正在加载,但代码块执行将完成,因此window.imgwidth中不会有任何数据

    如果在图像加载完成后的特定持续时间后尝试向window.imgwidth发出警报,则可以看到window.imgwidth具有该值。还有if块,仅当高度超过300时才将数据存储在window.imgwidth中,但没有else块,因此也需要将其作为后备实现:)


    如果我说得很难听,请告诉我:-D

    对不起@Tom。误读了问题。我删除了我的答案。没关系。谢谢你发邮件attempt@Matt-不确定我从哪里得到这个疯狂的想法(+1)
    function find_image(imgsrc) {
    
        var imgWidth,
            img = $('<img/>').attr('src', imgsrc).load(function() {
    
            var $img = $(this),
                height = $img.height(),
                width = $img.width();
    
            if (height > 300) {
                var x = height/300;
                imgWidth = Math.ceil(width/x);
            }
    
        });
    
        return imgWidth;
    
    }