Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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 如何定义.done()_Javascript_Jquery - Fatal编程技术网

Javascript 如何定义.done()

Javascript 如何定义.done(),javascript,jquery,Javascript,Jquery,我正在尝试实现deffered done函数的调用,但找不到实现的方法: jQuery.fn.imageload=function(src) { $this=$(this); var img=new Image(); img.src=src; if (img.complete) {done();return;} img.onload=done; function done() { console.log('done');

我正在尝试实现deffered done函数的调用,但找不到实现的方法:

jQuery.fn.imageload=function(src) {
    $this=$(this);
    var img=new Image();
    img.src=src;
    if (img.complete) {done();return;}
    img.onload=done;
    function done() {
        console.log('done');
        $this.empty().append(img);
    }
    return $this;
}

$('div').imageload('http://placehold.it/350x150').done(function() {
    //this not called
    console.log('done loading');
});
我应该在插件声明中添加什么来调用。在图像加载后完成

您需要使用对象

基本上,延迟对象有一个解析方法。当触发此命令时,意味着发生的任何异步进程都已完成。触发解析时,将依次调用所有分配了done和then的回调。传递给resolve方法的值将传递给这些回调(在本例中为img变量)

您需要使用对象


基本上,延迟对象有一个解析方法。当触发此命令时,意味着发生的任何异步进程都已完成。触发解析时,将依次调用所有分配了done和then的回调。传递给resolve方法的值将传递给这些回调(在本例中为img变量)。

我将尝试使用。我想这是可行的:

$.fn.imageload = function(src) {
    $this = this;
    return $.Deferred(function() {
        var self = this,
            img = new Image();
        img.onload = function() {
           $this.empty().append(img);
           self.resolve();
        };
        img.src = src;
    });
}

$('div').imageload('http://placehold.it/350x150').done(function () {
    console.log('done loading');
});

我会尽量利用它。我想这是可行的:

$.fn.imageload = function(src) {
    $this = this;
    return $.Deferred(function() {
        var self = this,
            img = new Image();
        img.onload = function() {
           $this.empty().append(img);
           self.resolve();
        };
        img.src = src;
    });
}

$('div').imageload('http://placehold.it/350x150').done(function () {
    console.log('done loading');
});
我会:

jQuery.fn.imageload = function(src) {
    var self = this,
        img = new Image(),
        def = new jQuery.Deferred();

    if (img.complete) {
        def.resolve();
    }
    img.onload = function() {
        console.log('done');
        self.empty().append(img);
        def.resolve(); 
    }
    img.src = src;
    return def.promise();
}

$('div').imageload('http://placehold.it/350x150').done(function() {
    console.log('done loading');
});
我会:

jQuery.fn.imageload = function(src) {
    var self = this,
        img = new Image(),
        def = new jQuery.Deferred();

    if (img.complete) {
        def.resolve();
    }
    img.onload = function() {
        console.log('done');
        self.empty().append(img);
        def.resolve(); 
    }
    img.src = src;
    return def.promise();
}

$('div').imageload('http://placehold.it/350x150').done(function() {
    console.log('done loading');
});

与.done或deferred不相关,但此片段在某些版本的IE中不起作用。若要修复IE,需要在设置onload后设置src。与.done或deferred不相关,但此片段在某些版本的IE中不起作用。若要修复IE,需要在设置onload后设置src。我不确定是否收到此消息,但是当图像加载时,它是如何触发的呢?我知道延迟对象是如何工作的,但是当图像加载时,您不解析它,只是在完成时?如果img.complete没有触发,你如何知道图像何时加载而没有onload函数?我不确定我是否得到了这个,但是当图像加载时它是如何触发的?我知道延迟对象是如何工作的,但是你只有在完成后才在图像加载时才解析它?如果img.complete没有启动,您如何知道图像在没有onload功能的情况下何时加载?似乎不起作用,def没有方法'resolve'@eicto-实际上在1.9中有一个更改,您现在构建了一个新的Deferred,所以请尝试上面的代码。您需要调用Deferred。目前它是对该函数的引用。似乎不起作用,def没有方法'resolve'@eicto-实际上在1.9中有一个更改,您现在构建了一个新的Deferred,所以请尝试上面的代码。您需要调用Deferred。目前它是对该函数的引用。