访问不到dom元素

访问不到dom元素


http://img1.sycdn.imooc.com//climg/600e2d950975210914990933.jpg

只有在渲染出左边的菜单项时才能访问到这个.category-item元素,但是就算是在dom加载完毕后,其他位置也依旧访问不到这个元素

相关代码:

(function(){
var itemTmpl='<div class="category-item">$getCategoryContent</div>'




function addEvent(){
//添加点击事件
$('.category').on('click','.category-item',function(){
$(this).addClass('active').siblings().removeClass('active')
choose($(this).data('itemData'))
})

}
function getCategoryContent(list){
// 渲染类目内容
if(list.icon.length!=0){
// 有icon
return '<img src='+list.icon+' /><span>'+list.name+'</span>'
}else{
return '<span>'+list.name+'</span>'
}
}
function initCategoryList(list){
// 渲染数据
list.forEach(function(item){
var str=itemTmpl
.replace('$getCategoryContent',getCategoryContent(item))//渲染类目内容

var $str=$(str)//转为jq对象
$str.data('itemData',item)//挂载数据
$('.category').append($str)
})
$('.category-item').first().click() //在这里能访问到.category-item ,就是左边那个菜单项,但是在其他位置获取不到菜单项
}
function getList(){
// 获取数据
$.get('../json/food.json',function(data){
var list=data.data.food_spu_tags//包含了每个类目以及类目下菜品
initCategoryList(list)
})
}
function init(){
getList()
addEvent()
}
init()
})()


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕久久 2021-01-25 11:17:31

同学你好,是想问,为什么初始时,右侧商品显示不出来吗?如果是的话,解答如下:

页面加载后,“ $('.category-item').first().click()”这句代码是可以正确执行的,该句代码执行后,正常应该渲染出右侧商品。同学的代码,之所以渲染不出来,是因为“ choose($(this).data('itemData'))”这句代码不正确。由于right.js中的代码,写在了一个自执行的匿名函数中,会形成一个独立的作用域,所以它里面的choose方法,在left.js中访问不到。所以在left.js中调用choose,根本不会执行right.js中的choose方法。

建议将right.js中的choose方法,挂载在全局对象window上,然后再在left.js中调用,如下:

http://img1.sycdn.imooc.com//climg/600e377909e0f78012950182.jpg

同学参考上面修改一下。

如果不是这个问题,或者不会修改,建议新建一个问题,再具体描述下,并把right.js中的代码粘贴出来(相关代码都粘贴出来),老师再给你解答。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师