kingda_young 2014-03-19 12:54 采纳率: 0%
浏览 789

关于使用javascript的宿主对象window的不解

前段时间看了javascript dom的编程艺术,就想实现一下里面的例子,其中有讲到图片库向后兼容的问题,本来这样子就可以实现图片的切换:

js:
function showPic(Whichpic){
var placeholder = document.getElementById("placeholder");
var source = Whichpic.getAttribute("href");
placeholder.setAttribute("src",source);

}
这样子可以实现没有问题,问题是书介绍了要兼容的问题,因此改了代码,

把onclick函数去掉。js中增加:function prepareGallery(){
if(!document.getElementsByTagName)return false;
if(!document.getElementById)return false;
var gallery = document.getElementById("nav");
var links = gallery.getElementsByTagName("a");
for(var i=0;i<links.length;i++)
{
links[i].onclick=function(){

        return !showPic(this);
    }
}

}
结果一运行showPic是运行了,但是链接还是被点了进去,也就是说for循环里面没有返回false~不知道是什么问题??求解。。。。。。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-12-09 18:56
    关注

    所有内容均由人工智能模型输出,其内容的准确性和完整性无法保证,不代表我的态度或观点。
    (文心一言专栏,V2.5.2版本,2023.12.09)


    该回答引用文心大模型3.5,仅提供参考,不保证完全正确
    你的问题可能在于,你在for循环中设置的onclick函数,并没有正确地绑定到每个链接元素上。在JavaScript中,当你在循环中创建一个函数,并且试图将这个函数作为回调函数,那么每次循环实际上都会创建一个新的函数实例。这就意味着,尽管你试图将函数返回值作为onclick事件的回调,但每次循环时都会创建一个新的函数实例,它们并不会共享你期望的this上下文。


    在JavaScript中,你可以使用一种叫做"闭包"的概念,来让循环中的每个元素共享同一个函数实例。以下是一种可能的解决方案:

    function prepareGallery() {
        if(!document.getElementsByTagName) return false;
        if(!document.getElementById) return false;
        var gallery = document.getElementById("nav");
        var links = gallery.getElementsByTagName("a");
    
        for(var i=0; i<links.length; i++) {
            (function(i) {
                links[i].onclick = function() {
                    return !showPic(this);
                }
            })(i);
        }
    }
    

    在上述代码中,我使用了一个立即执行的函数表达式(IIFE)来创建一个新的作用域,并在这个新的作用域中绑定了i的值。这样,每次循环都会创建一个新的作用域,并且每个链接都会绑定到这个新作用域中的showPic函数。这样就可以确保thisshowPic函数中正确地引用到当前的链接元素。


    希望这个解答对你有所帮助!如果你还有其他问题,欢迎继续提问。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题