在Jquery.load上调用JavaScript函数

时间:2014-06-30 19:16:57

标签: javascript jquery onerror

我有一个javascript函数setErrorImages(),它会搜索所有img个标签并为其提供onerror个功能。这很有效。

我还通过调用这样的de content函数来获得具有动态内容的分部jquery .load,这也有效:

$("#content").load("http://example.com/otherpage.php");

但是当新内容(otherpage.php)加载到分部时,setErrorImages()功能对新内容中的img不起作用。

我可以在otherpage.php上调用setErrorImages()函数,一切都运行正常,但这样我必须在每个其他页面上执行此操作,这很多。

有没有办法用jquery .load发送javascript文件或功能,
或者可能有一种方法可以在jquery .load之后立即重新执行javascript函数。

亲切的问候,
Liontack


function setErrorImages(){
    var images = document.getElementsByTagName("img");
    for (var i = 0; i < images.length; i++) {
        images[i].onerror = function(){ setErrorImage(this); };
    }
}

function setErrorImage(image){
    image.onerror = null;
    image.src = 'http://tanuri.eu/images/error.png';
}

2 个答案:

答案 0 :(得分:2)

$("#content").load("http://example.com/otherpage.php", setErrorImages);

.load()接受&#34;完成&#34;参数:

  

请求完成时执行的回调函数。

答案 1 :(得分:1)

首先,我建议使用this上下文而不是错误处理程序的参数:

function setErrorImage() {
    this.onerror = null;
    this.src = 'http://tanuri.eu/images/error.png';
}

其次,将setErrorImages更改为使用this

function setErrorImages() {
    var images = this.getElementsByTagName('img');
    for (var i = 0, n = images.length; i < n; ++i) {
        images[i].onerror = setErrorImage;    // parameter is now implict
    }
}

请注意,onerror调用现在不需要函数包装器 - 浏览器会自动将this设置为感兴趣的元素。

对于更简单的代码,您也可以使用jQuery为您完成这项工作,因为您已经加载了它:

function setErrorImages() {
    $('img', this).error(setErrorImage);
}

第三,使用complete的{​​{1}}处理程序,利用它将.load设置为刚被替换的DOM部分的父级这一事实。这样可以避免在页面中已经查看过的元素上设置this处理程序。

onerror

唯一的其他变化是,在您的初始调用中,您需要使用$('#content').load(url, setErrorImages); document传递给setErrorImages

.call