使用Javascript动态更改图像src
如果加载页面时图片出现问题,我会尝试更改一些使用Javascript动态更改图像src,javascript,html,image,onerror,Javascript,Html,Image,Onerror,如果加载页面时图片出现问题,我会尝试更改一些img标记的src。我似乎得到一些随机行为,特别是从InternetExplorer9。有些图像正确显示替换的图像,有些图像上有一个红十字。如果我在浏览器中调试,我会被告知未定义ImgError()。它在代码中有明确的定义,显然是有效的。为什么会这样 <div class="PhotoBorder"><img alt="" onerror="imgError(this)" src="./images/services/69_
img
标记的src
。我似乎得到一些随机行为,特别是从InternetExplorer9。有些图像正确显示替换的图像,有些图像上有一个红十字。如果我在浏览器中调试,我会被告知未定义ImgError()
。它在代码中有明确的定义,显然是有效的。为什么会这样
<div class="PhotoBorder"><img alt="" onerror="imgError(this)"
src="./images/services/69_Staffmember.jpg" /></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
$(window).load( function() {
$('.RowWrapper').each(function() {
var TotalWidth = 0;
$(this).find('.StaffMember').each(function() {
TotalWidth = TotalWidth + $(this).outerWidth(true);
});
this.style.width = TotalWidth + "px";
});
});
function imgError(img)
{
img.setAttribute("src","./images/services/49_ImgMissing.jpg");
img.removeAttribute("onerror");
}
</script>
$(窗口)。加载(函数(){
$('.RowWrapper')。每个(函数(){
var TotalWidth=0;
$(this).find('.StaffMember').each(function(){
TotalWidth=TotalWidth+$(此).outerWidth(真);
});
this.style.width=TotalWidth+“px”;
});
});
函数imgError(img)
{
setAttribute(“src”,“/images/services/49_ImgMissing.jpg”);
img.removeAttribute(“onerror”);
}
为图像元素指定一个id,然后尝试以下操作:
document.getElementById("imageid").src="./images/services/49_ImgMissing.jpg";
首先,如果您得到的错误是未定义
ImgError()
,那是因为您的函数名是ImgError
,而不是ImgError()
但是,如果这是你问题中的一个输入错误,那么你可能会得到错误
imgError()在某些情况下未定义
,因为可能是从缓存中请求图像,并且它的错误处理程序会立即触发-即,在解析文档的其余部分之前,这意味着您的imgError
函数尚不可用。要修复它,只需将您的imgError
函数放在文档头部的脚本标记中。我代表RobG回答。imgError()的定义在下面的代码中被调用的地方。您必须将代码定义放在html中调用的位置之上。否则,我发现您的结果可能未定义。无法使用ID,因为有许多图像。代码设计用于每个单独的代码。您使用jquery吗?@jp310我认为他使用的是基于脚本代码的jquery,或者您可以尝试:$(“.your_class”).attr(“src”,“your_src”);正如您所看到的,我在代码中使用jQuery,但不是为了这个。我只需使用onError属性调用ImgError()函数.TotalWidth.toString()+“px”;定义ImgError的脚本必须位于调用它的任何代码之前。HTML是按顺序解析和“执行”的。这与jQuery有什么关系?@RobG你的建议似乎有效。请提交一个答案,我会标记为正确。是的,那只是问题中的一个输入错误。哇,真的吗?我正在使用一个内容管理系统。我无法访问页面的标题部分。这不是document.ready甚至window.load的全部要点吗??文档应该已经准备好处理。@PaulMatthews-您的代码的哪一部分与$(窗口)有关。加载?当请求图像时出错,OneError属性将激发。这可能是立即的,也可能是延迟之后的。此外,您的imgError()
函数不在任何$(窗口)内。加载(这并不是说它会有什么不同)。