【问题标题】:Where is HTMLImageElemen.src handled for HTMLImageElemen?HTMLImageElemen.src 在哪里处理 HTMLImageElemen?
【发布时间】:2023-03-11 02:48:01
【问题描述】:

考虑以下检测图像 src 在 angular 中是否有效的代码

    isImage: function(src) {

        var deferred = $q.defer();

        var image = new Image();
        image.onerror = function(data) {
          console.log(data, "error");
            deferred.resolve([false, src]);
        };
        image.onload = function(data) {
          console.log(data, "success");
            deferred.resolve([true, src]);
        };

        image.src = "some_valid_image_url"
        setTimeout(function() {
          image.src = "some_valid_image_url"
        }, 5000)

        return deferred.promise;
    }



isImage("some_valid_image_url").then(function() {console.log("return")})

如果我在控制台上方运行代码,则会打印出

success

2次

但是

return

打印 1 次

好像某处有更改处理程序在监视该属性?

我的问题是.src 的更改处理程序在哪里,为什么.then 只解析一次?

【问题讨论】:

    标签: javascript html angularjs promise


    【解决方案1】:

    我的问题是.src 的更改处理程序在哪里

    javascript <img> 元素的问题集 onerroronload 处理程序。 <img>.src 属性设置了两次,调用了两次 onerroronload 事件处理程序。

    为什么 .then 只解析一次?

    Promise 最多可以解决或拒绝一次。 .then() 一旦链接到 Promise 对象就会被调用。

    【讨论】:

    • 但它在哪里检测到src 正在发生变化?
    • @Jal 在loaderror 事件中。 “如果在尝试加载或渲染图像时发生错误,并且已配置 onerror 事件处理程序来处理 error 事件,则将调用该事件处理程序。” 请参阅 <img>
    • 另见load事件。
    猜你喜欢
    • 1970-01-01
    • 2012-05-27
    • 2015-05-09
    • 2016-09-08
    • 2017-01-29
    • 1970-01-01
    • 2017-03-25
    • 2019-06-04
    • 2011-07-02
    相关资源
    最近更新 更多