[英]Open tab in form with javascript on submit
我有一个非常简单的表单示例,该表单被拆分为多个选项卡,然后将其发布到表单上以使用php进行验证和处理,简化后的代码如下(无需验证和处理步骤):
<style>
/* Style the list */
ul.tab {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
border: 1px solid #ccc;
background-color: #f1f1f1;
}
/* Float the list items side by side */
ul.tab li {float: left;}
/* Style the links inside the list items */
ul.tab li a {
color: black;
display: inline-block;
font-size: 15px;
font-weight: lighter;
padding: 14px 16px;
text-align: center;
text-decoration: none;
transition: all 0.3s ease 0s;
}
/* Change background color of links on hover */
ul.tab li a:hover {background-color: #ddd;}
/* Create an active/current tablink class */
ul.tab li a:focus, .active {background-color: #ccc;}
/* Style the tab content */
.tabcontent {
display: none;
padding: 60px 10px;
border: 1px solid #ccc;
border-top: none;
margin-bottom: 20px;
}
</style>
<ul class="tab">
<li><a href="#" class="tablinks" onclick="openTab(event, 'tab_1')">tab 1</a></li>
<li><a href="#" class="tablinks" onclick="openTab(event, 'tab_2')">tab 2</a></li>
</ul>
<!-- FORM Starts -->
<form method="POST" action="">
<div id="tab_1" class="tabcontent">
Tab One Content
</div>
<div id="tab_2" class="tabcontent">
Tab Two Content
</div>
<input type="submit" name="save_settings_button" value="Save Settings" />
</form>
<script>
function openTab(evt, tabName) {
var i, tabcontent, tablinks;
tabcontent = document.getElementsByClassName("tabcontent");
for (i = 0; i < tabcontent.length; i++) {
tabcontent[i].style.display = "none";
}
tablinks = document.getElementsByClassName("tablinks");
for (i = 0; i < tabcontent.length; i++) {
tablinks[i].classList.remove("active");
}
document.getElementById(tabName).style.display = "block";
evt.currentTarget.classList.add("active");
}
var mybtn = document.getElementsByClassName("tablinks")[0];
mybtn.click();
</script>
这有助于将大表格分解为多个部分,但是如果用户在选项卡2上并按下提交按钮,则会将其带回到选项卡1,这不是很好的用户体验!
有什么方法可以使用javascript来识别提交表单时哪个标签,然后在重新加载页面后在该标签上重新加载页面?
由于您在提交表单后使用php处理所有内容,因此在页面刷新后知道活动选项卡的唯一方法是在表单中添加自定义字段,并在更改选项卡时对其进行更新。
所以在你的HTML
<input type="hidden" id="active_tab" name="active_tab" value="tab_1" />
然后,您应该编辑openTab函数以在调用此输入时对其进行更新。
document.getElementById("active_tab").value = tabName;
现在在php中,当加载页面时,您将添加一个新变量来捕获活动选项卡,并将活动类更新到您的选项卡。
$active_tab = $_POST['active_tab'];
$active_tab1 = "";
$active_tab2 = "";
if ($active_tab ==="tab_1") $active_tab1 = "active";
if ($active_tab ==="tab_2") $active_tab2 = "active";
然后最后更新选项卡以使用活动类。
<div id="tab_1" class="tabcontent <?php echo $active_tab1; ?>">...</div>
div id="tab_2" class="tabcontent <?php echo $active_tab2; ?>">...</div>
但是,这并不是最佳方法,为了获得更好的用户体验,我将更改所有提交给ajax调用的表单并处理外部php文件中的所有内容。
我将检查active
类的存在,以确定当前哪个标签处于活动状态。 例如,诸如tablink.classList.contains('active')
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.