Javascript 另一个IE错误:使用jquery地址或至少ajax时,第0行出现堆栈溢出
大家好,各位堆垛工, 我构建了一个ajax图像库,并使用asual的jquery地址进行深度链接。 加载库之后,在单击图像的第一次单击或所有缩略图的单击时,错误就会发生 基本上,我在图片上的代码是:Javascript 另一个IE错误:使用jquery地址或至少ajax时,第0行出现堆栈溢出,javascript,jquery,ajax,image-gallery,Javascript,Jquery,Ajax,Image Gallery,大家好,各位堆垛工, 我构建了一个ajax图像库,并使用asual的jquery地址进行深度链接。 加载库之后,在单击图像的第一次单击或所有缩略图的单击时,错误就会发生 基本上,我在图片上的代码是: <li id="thumbnail_<?php echo $row->position;?>"><a href="javascript:;" onclick="javascript:setAddress('<?php echo $row->url;?&
<li id="thumbnail_<?php echo $row->position;?>"><a href="javascript:;" onclick="javascript:setAddress('<?php echo $row->url;?>');"><img src="<?php echo $row->filePath;?>" /></a></li>
原始海报中的
:
好的,我找到了。我真的不知道为什么这会给IE带来如此大的麻烦,但事实是:
为了跟踪专辑标题,而不必在每次ajax调用中都获取它,我将其保存在一个不可见的文本输入中:
<input id="albumName" type="text" style="display:none;" value="<?php echo $album->name;?>"/>
去掉onclick事件中的javascript:。标签在那里是无用的。当页面加载时,在两个浏览器中都有一个404和一个Ajax调用。由于checkAnchor()
是您的URL更改函数,因此似乎在IE中生成了一个错误,我猜checkAnchor()
中的某些内容会导致checkAnchor()
再次被调用,可能是在reloadImage()
中,从而导致无限递归。最小化的代码太多了,我无法进一步浏览相关部分。这似乎是因为您试图显示尚未完全完成预加载的图像。如果在单击缩略图之前等待几秒钟,则不会出现此弹出窗口。另外-它是一个弹出窗口,一个显示“第0行堆栈溢出”的javascript警报-它不是javascript错误。您的一个javascript组件/ie插件正在捕获错误并显示警报。也许在你的js文件中搜索“警报”。@epascarello:我删除它是为了:
<script type="text/javascript">
function setAddress(address){
$.address.value(address.replace(/^#/, ''));
}
</script>
<script type="text/javascript">
$.address.change(function(event) {
checkAnchor();
});
function checkAnchor(){
var albumId = <?php echo $albumId;?>;
if($.address.value() != '' && $.address.value() != '/'){
//get the id of the image
var arData = $.address.value().split("-");
var arIdExt = arData[1].split(".");
var id = arIdExt[0];
reloadImage(albumId,id,'0','curr');
}else{
reloadImage(albumId,id,'1','curr');
}
}
function reloadImage(albumId, photoId, position, action){
$("#imgLoading").show();
var visibleThumbnails = <?php echo $visibleThumbnails;?>;
var albumName = $("#albumName").val();
$.post('/montreal/inc/ajax/changeImage.php',{albumId:albumId, photoId:photoId, position:position, action:action}, function(data){
//data + photoposition=[url]
var arData = data.split("photoposition=");
if(position == 0){
position = jQuery.trim(arData[1]);
}
$("#photo-details").html(arData[0]);
$.address.title(albumName+" - Photo #"+position);
$("#imgLoading").hide();
//reload the thumbnails
if(action == 'next'){
var maxThumbnails = <?php echo count($album->arPhotos['photos']);?>;
var nextPosition = position+1;
var currentRow = Math.ceil(position/visibleThumbnails);
if(nextPosition > maxThumbnails){ nextPosition = 1;}
if(position%visibleThumbnails == 0 || position == maxThumbnails){
reloadThumbnails(currentRow,visibleThumbnails,albumId,nextPosition,'next');
}else{//fix the activeposition of the reloadThumbnails
reloadThumbnails(currentRow,visibleThumbnails,albumId,nextPosition,'curr');
}
}else if(action == 'curr'){
var maxThumbnails = <?php echo count($album->arPhotos['photos']);?>;
var currentRow = Math.ceil(position/visibleThumbnails);
reloadThumbnails(currentRow,visibleThumbnails,albumId,position,'curr');
}
},"html"
);
<input id="albumName" type="text" style="display:none;" value="<?php echo $album->name;?>"/>