遇到一个关于调用javascript语句不起作用的问题
来源:互联网 发布:淘宝爆款是什么意思 编辑:程序博客网 时间:2024/06/06 15:40
今天遇到一个需求,就是在页面的sidebar/左侧有一个下拉菜单,菜单有三级,前两级点击的时候会弹出下一级的菜单,最后一级点击的时候页面内容部分/右侧会展现相应的文章内容。
因为不想在每一次点击最后一级菜单的时候都去数据库读取数据或者是用ajax读取数据,所以在页面一加载的时候就已经把每个小菜单对应的文章内容也获取到了。
我的思路就是,每篇文章跟在每一个小菜单,然后用隐藏div隐藏起来,每个隐藏div都有个属性,这个属性就是小菜单的id值。当点击每一个小菜单的时候,用javascript获取到这个菜单的id值,然后获取到对应id的隐藏div里面的所有内容,然后把内容放到右侧那里。
其实如果只是点击左侧小菜单,右侧就显示相应的文章内容,是比较好实现的,只要小菜单和隐藏div都有对应相同的属性值,就能调用。例如如下代码所示:
<li class="list-group-item dropdown clearfix" sid="li_{$voco['id']}"> <a href="javascript:void(0);" name="show_div" sid="sd_{$voco['id']}"> <i class="fa fa-circle"></i> {$voco['title']} </a> <div style="display:none;" id="div_{$voco['id']}">
如图中代码所示,我给a标签(小菜单)和div(隐藏div)都设置了一个同样包含有id值的属性,想要点击左侧的小菜单,右侧就显示相应的内容,代码如下:
<script type="text/javascript"> $("[name='show_div']").click(function(){ //先要去除所有红色, $("[name='show_div']").parent().removeClass('active'); var val = $(this).attr('sid'); val = val.substr(3); //点击对应的优惠,sidebar上的li元素是active,即为红色, $("[sid='li_"+val+"']").addClass('active'); //选择相应的优惠内容在页面上 val = "div_" + val; var html = document.getElementById(val).innerHTML;//alert(html); document.getElementById('showdiv').innerHTML = html;
这里用到innerHTML,先用innerHTML获得隐藏div里面的内容,再把这个内容赋值给右侧的内容展示区域。
如果问题到这里的话应该就简单了,但是现在还有一个需求,就是在右侧显示的文章内容里面会有几篇文章的标题,而用户点击文章标题就可以看到相应的文章了,然后我就想,那可以啊,只要给那几个文章标题都加上和小菜单一样的属性值,那么点击这几个文章标题的时候,同样获取到这个属性值,再获取到这个属性值对应的内容后覆盖到右侧内容,就可以了。
所以我就如法炮制,但是发现一个问题,点击那几个文章标题根本没有反应,就是说我对那几个文章标题写的js语句根本不起反应,这是为什么呢?我打开浏览器,按F12调试,然后输入js语句,终于让我发现了问题所在,那就是如果点击左侧菜单,弹出内容后,在浏览器调试栏输入js语句,点击内容里面的文章标题,js语句起作用了;但是我点击了文章标题之后,再一次弹出来的内容里面也包含了文章标题,我点击,没反应,说明js语句只运行了一次,而我们的需求逻辑是对文章标题做作用的js语句必须时刻运行,所以我想到了每点击一次文章标题,就要重新生成一次js语句,就是要把对文章标题作用的js语句写到一个函数里面,并且不断循环调用,代码如下:
$("[name='show_ss']").click(function(){ var pp = $(this).attr('sid'); pp = pp.substr(3); pp = "div_" + pp; var html = document.getElementById(pp).innerHTML; document.getElementById('showdiv').innerHTML = html; if (true) { bb(); } }); function bb(){ $("[name='show_ss']").click(function(){ var pp = $(this).attr('sid'); pp = pp.substr(3); pp = "div_" + pp; var html = document.getElementById(pp).innerHTML; document.getElementById('showdiv').innerHTML = html; bb(); }); }
感觉个人对于js只理解了一点点,还是要从根本去理解,这样写语句的时候才能更明白如何符合脉络逻辑去编写。
- 遇到一个关于调用javascript语句不起作用的问题
- 请教一个关于javascript执行sql语句的问题
- 关于&& || ! 遇到的一个问题
- 遇到问题---hosts不起作用问题的解决方法
- 开发中遇到的一个关于 SQL 语句执行的问题
- 关于asp调用webservice遇到的问题
- 关于webService调用遇到的问题
- javascript push一个对象遇到的问题。
- 一个关于JavaScript的问题
- 遇到的一个关于IFS的问题
- 关于这两天遇到的一个问题
- 关于request遇到的一个问题
- 今天遇到一个问题,关于ibatis的
- 关于memcpy遇到的一个问题
- 关于sql查询语句 的一个问题
- 一个关于if语句的小问题
- FloatingActionButton behavior 不起作用的一个问题
- 关于td中的width不起作用的问题。
- PHPStorm安装主题插件
- c# Entity Framework学习(+数据库连接错误解决办法)
- Tomcat HTTPS 证书制作
- 使用Visual Studio 2005搭建opengl开发环境
- Android开发艺术探索<View的点击事件触发过程>
- 遇到一个关于调用javascript语句不起作用的问题
- JAVA实现json和对象间的相互转换
- hihocoder-1283
- Tp框架总结
- QT - 制作窗口圆角
- Oracle数据库函数
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- 基于RTP协议的H.264视频传输系统:实现
- javascript中的call()和apply()方法 厉害了我的哥