gpt4 book ai didi

Javascript getElementsByClassName() 无法找到正确的类

转载 作者:行者123 更新时间:2023-12-01 02:31:54 26 4
gpt4 key购买 nike

我一直在尝试使用以下指南进行简单的表单设置:https://www.w3schools.com/howto/howto_js_form_steps.asp.

我在表单内有三个带有 class="tab"的 div,我试图使用 javascript 使其可见/不可见:

var currentTab = 0; // Current tab is set to be the first tab (0)
showTab(currentTab); // Display the current tab
function showTab(n) {
// This function will display the specified tab of the form...
var x = document.getElementsByClassName("tab");
x[n].style.display = "block";
}

这应该显示第 n 个选项卡,但加载页面时没有选项卡可见,此外,当页面加载且 n = 0 时,两个按钮(上一个和下一个,请参阅下面的代码)都是可见的;我尝试使用以下方法使其适用于不同的设置:

<script> // code goes here </script>

或者简单地包含一个单独的.js文件,将脚本部分嵌入到head、body、html甚至表单中都没有成功。一直以来,我都可以在同一脚本部分的开头运行简单的 js 命令,例如:alert("test");。

我正在使用预制 Bitnami LAMP 堆栈的 Linux 计算机上运行该页面。

<!Doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="styles/login.css" />
<link rel="stylesheet" href="styles/main.css">
<link rel="stylesheet" href="styles/new_user.css">
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<script>

var currentTab = 0; // Current tab is set to be the first tab (0)
showTab(currentTab); // Display the current tab

function showTab(n) {

// This function will display the specified tab of the form...
var x = document.getElementsByClassName("tab");
x[n].style.display = "block";

//... and fix the Previous/Next buttons:
if (n == 0) {
document.getElementById("prevBtn").style.display = "none";
} else {
document.getElementById("prevBtn").style.display = "inline";
}
if (n == (x.length - 1)) {
document.getElementById("nextBtn").innerHTML = "Submit";
} else {
document.getElementById("nextBtn").innerHTML = "Next";
}
//... and run a function that will display the correct step indicator:
fixStepIndicator(n)
}

function nextPrev(n) {

// This function should figure out which tab to display
var x = document.getElementsByClassName("tab");

// Hide the current tab:
x[currentTab].style.display = "none";
// Increase or decrease the current tab by 1:
currentTab = currentTab + n;
// if you have reached the end of the form... :
if (currentTab >= x.length) {
//...the form gets submitted:
document.getElementById("register_form").submit();
return false;
}
// Otherwise, display the correct tab:
showTab(currentTab);
}

// This manages step indicators.
function fixStepIndicator(n) {
// This function removes the "active" class of all steps...
var i, x = document.getElementsByClassName("step");
for (i = 0; i < x.length; i++) {
x[i].className = x[i].className.replace(" active", "");
}
//... and adds the "active" class to the current step:
x[n].className += " active";
}

</script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body class="background">
<main class="wrapper">
<div id="parent">
<form id="register_form" action="" method="post">
<h1>New user:</h1>
<div style="text-align:center;">
<span class="step"></span>
<span class="step"></span>
<span class="step"></span>
</div>
<div style="float:right; padding: 15px;">
<button type="button" id="nextBtn" onclick="nextPrev(1)">Next</button>
</div>
<div style="float:left; padding: 15px;">
<button type="button" id="prevBtn" onclick="nextPrev(-1)">Previous</button>
</div>
<div class="tab">
//content
</div>

<div class="tab">
//content
</div>

<div class="tab">
//content
</div>
</div>
</form>
</div>
</main>

</body>

</html>

选项卡类本身看起来像并且默认情况下应该是不可见的:

.tab {
display: none;
}

我想知道为什么表单中的选项卡似乎不受showTab函数的影响。我已经研究这个问题几个小时了,但我完全一无所知,任何帮助将不胜感激!

亲切的问候。

最佳答案

代码的第一个问题是 JavaScript 在页面加载之前运行。因此它不会起作用。在调用函数之前,您必须等待页面加载。有多种方法可以实现这一点,通常使用库。

在纯 JavaScript 中,您可以监听文档上的事件 DOMContentLoaded,如下所示:

<script>
var currentTab = 0; // Current tab is set to be the first tab (0)

function showTab(n) {
// This function will display the specified tab of the form...
var x = document.getElementsByClassName("tab");
x[n].style.display = "block";
}

document.addEventListener("DOMContentLoaded", function(event) {
// this code will be running when the document is loaded
showTab(currentTab); // Display the current tab

});
</script>

关于Javascript getElementsByClassName() 无法找到正确的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com