Hello stackoverflow-errs, 我构建了一个ajax图像库,并使用asual'jquery地址进行深层链接。 在加载图库后,在第一次点击图片或缩略图的所有点击时,就会发生错误。
基本上,我在图片上的代码是:
<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之前出现“第0行的堆栈溢出”,因此我很困惑它可能来自何处。单击错误消息后,没有任何反应,再次单击图像后,库实际上工作。但是,如果我单击缩略图,则会出现错误,但如果再次单击缩略图,则仍会显示错误。
据我所知,这个错误是通用的,通常是由循环或递归引起的。但我看不到一个,特别是当我看到它只发生在画廊的第一次点击时。
任何人都有关于我应该搜索的位置的提示吗?
错误示例: http://www.ckoi.com/montreal/photos/gala-des-gemeaux-tapis-rouge-194/
编辑: 经过一些测试,我意识到错误实际上是在我加载页面后发生的。我点击的任何地方,都会出现堆栈溢出。所以我更加困惑......但也许是因为我第一次在ajax加载画廊?我会调查
答案 0 :(得分:1)
来自原始海报:
好的,我找到了。我真的不确定为什么这会给IE造成这样的麻烦,但这里是:
为了跟踪专辑标题而不是必须在我的每个ajax调用中获取它,我将其保存在一个不可见的文本输入中:
<input id="albumName" type="text" style="display:none;" value="<?php echo $album->name;?>"/>
如果标题在隐藏的输入中有双倍空格,那么IE就是抱怨......对我来说,这没有任何意义,但现在它有效......
感谢各位有识之士!希望这有助于其他人调试IE ....