我有一个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';
}
答案 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