Javascript切换可见性问题
Javascript Toggling Visibility Question
好的,我想让这段Javascript工作。另外,我对Javascript还是个新手。本质上,我想做的是我有一个菜单在我的页面的左边,有链接:家,关于,响应,脚本练习,最终项目,并联系列表。在我的CSS页面上,每一个都有一个带标签的div id(即#home, #about, #response…),并且都被放置在页面上的相同位置并被隐藏。当单击链接时,相应的div id应该在页面上可见。我使用的代码是这样的:
function show(listx) {
home.style.visibility = "hidden"
about.style.visibility = "hidden"
response.style.visibility = "hidden"
script.style.visibility = "hidden"
project.style.visibility = "hidden"
contact.style.visibility = "hidden"
listx.style.visibility = "visible"
}
function shows(listz) {
home.style.visibility = "hidden"
about.style.visibility = "hidden"
response.style.visibility = "hidden"
script.style.visibility = "hidden"
project.style.visibility = "hidden"
contact.style.visibility = "hidden"
listz.style.visibility = "visible"
}
我从Felipe Bottrel Souza 1998年的一个名为Fade in Menu script的旧脚本中改编了这个代码。
问题是,这个脚本可以在IE, Chrome和Safari中工作,但不能在Firefox中工作。
任何想法/帮助都是非常感谢的!给某物一个id
不应该在JavaScript中自动给它一个名字。许多浏览器这样做是为了与旧代码兼容,但正如你所注意到的,它不可靠,应该避免。
相反,您应该使用document.getElementById
方法通过id
引用元素。
例如,您可以用document.getElementById("home")
替换home
的每个实例,或者定义您第一次使用它们时想要访问的所有元素:
var home = document.getElementById("home");
调用变量"home", "about"等并不是指向div id,除非你在页面加载时设置它们。试试这个:
var home, about, response, script, project, contact, listx;
window.onload = function() {
home = document.getElementById('home');
about = document.getElementById('about');
response = document.getElementById('response');
script = document.getElementById('script');
project = document.getElementById('project');
contact = document.getElementById('contact');
listx = document.getElementById('listx');
}
我建议使用jQuery、prototype、MooTools等javascript库。任何东西。
如果你是javascript新手,不要浪费时间去熟悉DOM。这将花费你很长时间,你仍然无法做到别人可以超级快的东西,你不会跨浏览器完成它,性能,bug解决了。
例如,您正在努力处理的代码可以这样做。对于初学者来说,因为它们(理论上)都在一个容器div中,并且彼此是兄弟姐妹,所以应该非常简单:
$('#listx').show().siblings().hide();
哇!一行代码。容易peasy。不要再浪费时间在javascript上了!
这里有一种更紧凑的编码方式:
让所有这些对象在你的页面有CSS id匹配这些名称
var hideList = ["home", "about", "response", "script", "project", "contact"];
function show(listx) {
for (var i = 0; i < hideList.length; i++) {
document.getElementById(hideList[i]).style.visibility = "hidden";
}
document.getElementById(listx).style.visibility = "visible";
}
我认为show()
和shows()
不需要单独的函数,因为它们只是在传递的参数中不同,所以您可以将适当的对象名称传递给一个函数。
如果你使用像jQuery或YUI这样的现代库,你可以给每个对象隐藏一个特定的类名,然后你可以在一个函数调用中获取页面中所有具有该类名的对象到一个数组中,然后对该数组中的项进行操作。这更容易维护,因为如果页面的内容改变了,代码不需要修改来匹配。
- D3在一个调用中绘制不同的SVG形状,没有可见性
- jQuery css可见性在load方法中不起作用
- 页面可见性API实际上支持操作系统屏幕锁定吗
- 有没有一种方法可以从隐藏的可见性(CSS,JS)中获得淡入效果
- JavaScript可见性不起作用('隐藏'起作用,'可见'不起作用)
- 为什么JavaScript中存在单态和多态性问题
- 从内部回调的可见性
- Openlayers 3为了可见性而绑定到Vector层的复选框没有任何作用
- 在另一个下拉列表中的选择上切换下拉列表中选项的可见性
- 无法手动将 DIV 元素上的可见性设置为 true.“TH:IF”问题
- jqGrid + 引导多选可见性问题
- jquery 砌体切换可见性问题
- 当垃圾邮件与悬停事件时,元素可见性的问题
- Jquery悬停显示和隐藏可见性问题
- IE8/9幻灯片显示可见性问题…
- 另一个“切换可见性”的问题
- 不能在button - var可见性或事件处理问题上更新highcharts数据
- 试图使固定的表头在HTML,滚动和可见性问题
- Javascript中的CSS属性可见性问题
- Javascript切换可见性问题