《JavaScript DOM编程艺术 第二版》 第六章代码未实现图片在当前窗口更新效果?

新手上路,请多包涵

//HTML代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8"  />
        <title> Imager Gallery</title>
        <link rel="stylesheet" href="styles/layout.css" type="text/css" media="screen" />
    </head>
    <body>
        <h1>Snapshots</h1>
        <ul id="imagegallery">
            <li>
                <a href="Images/Gaki.jpg"  title="Gaki Display"><img src="Images/Gaki.jpg" alt="Gaki"></a>
            </li>
            <li>
                <a href="images/Twe.jpg"   title="back to twenty-four"><img src="images/Twe.jpg" alt="Twe"></a>
            </li>
            <li>
                <a href="images/Kur.jpg"   title="Fit stone"><img src="images/Kur.jpg" alt="Kur"></a>
            </li>
            <li>
                <a href="images/Name.jpg"  title="whats your name"><img src="images/Name.jpg" alt="Name"></a>
            </li>
        </ul>
        <img id="placeholder" src="images/placeholder.jpg" alt="my image gallery" />
        <p id="description">Choose a image.</p>
        <script type="text/javascript" src="scripts/showPic.js"> </script>
    </body>
</html> 

//JS代码


    //共享onload事件
    function addLoadEvent(func){
        var oldonload = window.onload;  //将onload存进 变量oldload
        if (typeof window.onload !='function'){ //如果没有绑定任何函数,就像平时那样把新函数添加给它
            window.onload = func;
        }else {
            window.onload = function(){ //如果在这个处理函数上已经绑定了一些函数,就把新函数追加到现有指令的末尾
                oldonload();
                func();
            }
        }
    }
    addLoadEvent(prepareGallery);//调用函数

    function prepareGallery(){
        if (!document.getElementsByTagName) return false;            //check 有无tagname function
        if (!document.getElementById) return false;                  //check 有无ID function
        if (!document.getElementById("imagegallery")) return false; //check 有无imagegallery的id tag
        var gallery = document.getElementById("imagegallery");      //将imagegallery标签赋值给gallery
        var links = gallery.getElementsByTagName("a");              //将获取的a标签赋值给links
        for ( var i = 0; i < links.length; i++){                    //遍历a标签 赋予每个节点onclick事件
            links[i].onclick = function(){
                return showPic(this) ? false : true;                //this之links[i]    if 成功 执行false指令,即不跳到新窗口;否则true,打开新窗口
            }
        }
    }
    //点击图片,可以在当前页面切换图片
    function showPic(whichpic){
        if (!document.getElementById("placeholder")) return false;                          //check 有无placeholder
        var source = whichpic.getAttribute("href");                                         //获取href的属性给参数whichpic并赋给变量source
        var placeholder = document.getElementById("placeholder");                           //获取id "placeholder" 并赋值
        if (!placeholder.nodeName != "IMG") return false;                                   //check placeholder是否图片 return false 指的是请离开 通俗理解:如果不是,请离开
        placeholder.setAttribute("src",source);                                             //将placeholder的src属性设置成source的值
        if (document.getElementById("description")){                                        //检查标签是否存在
        var text = whichpic.getAttribute("title") ? whichpic.getAttribute("title") : "";    //检查title是否存在,存在赋值,不存在赋空值
        var description = document.getElementById("description");                           //get 赋值变量
        if (description.firstChild.nodeType == 3){                                          //check nodeType 是否是3
            description.firstChild.nodeValue = text;
            }
        }
        return false;
    }

Q:书中要求实现图片在当前窗口完成替换操作,达到图片库的效果,但每次都是会用新窗口打开,请问上面的代码哪里出了问题?

阅读 1.5k
1 个回答

showPic函数里面有两个地方需要修改

1、if (!placeholder.nodeName != "IMG") return false; 这里前面多了个!

2、最后的return false;应该改为return true;,这样onclick里才能return false;,才能阻止默认(a标签点击跳转页面)。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题