我有一个非常简单的表单示例,它被分成标签,它被发布到自身上以便用PHP进行验证和处理,简化版本的代码如下(没有验证和处理步骤):< / p>
<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上并按下提交按钮,则会将其返回到选项卡一,而不是非常好的用户体验!
有没有办法在提交表单时使用javascript识别哪个选项卡处于焦点,然后在重新加载页面后重新加载该选项卡上的页面?
答案 0 :(得分:1)
由于您在提交表单后使用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文件中的所有内容。
答案 1 :(得分:0)
我会检查是否存在active
类,以确定哪个标签当前处于活动状态。例如,tablink.classList.contains('active')
之类的东西。