在单个页面上使用此.js 2 次时,它仅适用于一个实例
When using this .js 2 times on a single page it only works in the one instance
此脚本在文本区域上方创建菜单选项卡。如果仅在页面上使用一次,则该脚本有效,但是我需要在单个页面上使用它两次,以创建 2 个文本区域,每个文本区域上方都有一个菜单。一旦我使用它两次,只有一个实例有效。任何建议。
window.onload=function() {
// get tab container
var container = document.getElementById("tabContainer");
// set current tab
var navitem = container.querySelector(".tabs ul li");
//store which tab we are on
var ident = navitem.id.split("_")[1];
navitem.parentNode.setAttribute("data-current",ident);
//set current tab with class of activetabheader
navitem.setAttribute("class","tabActiveHeader");
//hide two tab contents we don't need
var pages = container.querySelectorAll(".tabpage");
for (var i = 1; i < pages.length; i++) {
pages[i].style.display="none";
}
//this adds click event to tabs
var tabs = container.querySelectorAll(".tabs ul li");
for (var i = 0; i < tabs.length; i++) {
tabs[i].onclick=displayPage;
}
}
// on click of one of tabs
function displayPage() {
var current = this.parentNode.getAttribute("data-current");
//remove class of activetabheader and hide old contents
document.getElementById("tabHeader_" + current).removeAttribute("class");
document.getElementById("tabpage_" + current).style.display="none";
var ident = this.id.split("_")[1];
//add class of activetabheader to new active tab and show contents
this.setAttribute("class","tabActiveHeader");
document.getElementById("tabpage_" + ident).style.display="block";
this.parentNode.setAttribute("data-current",ident);
}
>还没有找到解决方案,但仅供参考,您最初将其标记为jQuery,如果它是jquery,您可以轻松地中断该代码的几行并编写为:(取决于版本)
function displayPage(e) {
var current = $(this).parent().attr("data-current");
$("#tabHeader_" + current).removeClass("tabActiveHeader")
$("#tabpage_" + current).hide();
var ident = this.id.split("_")[1];
$(this).addClass("tabActiveHeader");
$("#tabpage_" + ident).show();
$(this).parent().attr({ 'data-current': ident })
}
$(function() {
var container = $("#tabContainer"),
navitem = container.find((".tabs ul li")).first(),
ident = navitem[0].id.split("_")[1];
navitem.addClass("tabActiveHeader").parent().attr({ 'data-current': ident });
$(".tabpage").filter(function(i) { return i>0; }).hide();
// OR
// $(".tabpage:not(:first-child)").hide();
$(".tabs ul li").on("click", displayPage)
});
请参阅此 jsFiddle 中先前 jQUERY 的工作示例
另外,你看过jQueryUI.Tabs吗?
不要硬设置window.onload
(将最后一个设置处理程序替换为新处理程序),而是使用以下代码为同一对象上的同一事件注册任意数量的事件处理程序:
window.addEventListener('load',function(){
// Your code here
},false);
更多关于element.addEventListener,特别是IE支持的信息
这不适用于旧版本的IE;如果您需要此支持,我强烈建议使用像jQuery这样的跨浏览器库。您最初将问题标记为与 jQuery 相关,但代码中没有使用 jQuery。
相关文章:
- AddEventListener适用于浏览器,但不适用于Android
- 查找仅适用于原始图像的图像放大算法的名称
- 如何在category.php中执行jquery,这应该适用于类别wordpress中的每个帖子
- Web编程,简单但适用于机器人项目
- JavaScript不适用于internet explorer和Firefox,但适用于谷歌
- Jquery事件处理程序仅适用于匿名函数
- jQuery调整大小函数只适用于窗口
- 火灾在卸载前确认警报仅适用于外部站点
- EmberJS-适用于各种模型的适配器动态名称空间
- Facebook共享链接适用于用户,但不适用于粉丝页面管理员
- jQuery-适用于移动设备的多级菜单
- 循环中的切换脚本只适用于第一次迭代
- 插件总是只得到最后一个实例,如何让它适用于多个元素
- Javascript 原型 - 不仅适用于实例对象
- 在单个页面上使用此.js 2 次时,它仅适用于一个实例
- if 语句仅适用于第一个实例
- iPhone jquery/ajax仅适用于某些实例
- 在两个地方调用同一个函数只适用于一个实例
- jQuery . addclass()和. removeclass()只适用于元素的第一个实例
- 如何创建多个可滚动文本实例?它适用于一个例子