大家好,我建立了一个ajax图片库,并使用jquery地址进行深度链接。在加载图库后,在单击图像时的第一次onclick或所有缩略图的单击时发生错误。
基本上,我在图像上的代码是:<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>
我对缩略图的代码是:
<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>
这样当我点击时,我使用setAddress:
改变地址栏中的地址<script type="text/javascript">
function setAddress(address){
$.address.value(address.replace(/^#/, ''));
}
</script>
,然后我检测地址的变化,并在ajax中重新加载图像(以及相应的缩略图)。
<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"
);
}"第0行堆栈溢出"出现在点击之后和setaddress之前,所以我很困惑它可能来自哪里。点击错误消息后,什么也没有发生,再次点击图像后,图库实际上工作了。但是如果我点击缩略图,错误就会出现,但是如果我再次点击缩略图,错误还是会出现。
据我所知,这个错误是通用的,通常是由循环或递归引起的。但是我看不到,特别是当我看到它只发生在画廊的第一次点击。
谁有提示,我应该在哪里搜索?
错误示例:http://www.ckoi.com/montreal/photos/gala-des-gemeaux-tapis-rouge-194/
编辑:经过一些测试,我意识到这个错误实际上是在我加载页面之后发生的。点击任何地方,都会出现堆栈溢出。所以我更困惑了…但也许是因为我第一次用ajax加载图库?我将调查
原海报:
好的,我找到了。我真的不确定为什么这会给IE带来这样的麻烦,但它是这样的:
为了跟踪专辑标题,并且不必在每次ajax调用中都获得它,我将它保存在一个不可见的文本输入中:
<input id="albumName" type="text" style="display:none;" value="<?php echo $album->name;?>"/>
如果标题在隐藏的输入中有双空格,IE会抱怨…对我来说,这毫无意义,但现在它工作了…
谢谢大家的真知灼见!希望这有助于其他人调试IE....