javascript - 使用 Javascript 使 Anchor 标记有条件地工作
问题描述
我有一个单选按钮。我想对“提交”锚标记实施验证,如果未在单选按钮上进行选择,则显示错误,如果选择单选按钮,则重定向到href
属性中提供的 URL。
以下是单选按钮的代码 -
<div>
<input required="" type="radio" id="group02-0" name="group02" value="Yes" onclick="yesnoCheck();">
<label for="group02-0" >Yes</label>
<input type="radio" id="group02-1" name="group02" value="No" onclick="yesnoCheck();">
<label for="group02-1">No</label>
</div>
<script>
var radio_value = "";
function yesnoCheck() {
radio_value = document.querySelector('input[name="group02"]:checked').value;
}
</script>
在同一个HTML
文件中,我有提交锚标记的代码 -
<a href="https://www.google.com" onclick="return submitCheck();"><span>Submit</span></a>
<script>
function submitCheck() {
if (radio_value === "") {
//Display an error. The user should not be taken to the next page
return false;
} else {
//User should be taken to the URL in the href attribute
return true;
}
}
</script>
无论我是否在单选按钮上进行选择,锚标记总是将我带到下一页。请帮忙!
解决方案
- 您不需要两个单选按钮。只有一个复选框。
- 用于
Event.preventDefault()
阻止默认浏览器导航 - 使用输入元素的
checked
状态来确定结果 - 最后使用
document.location
导航到一个EL_submitBtn.getAttribute('href')
- PS:不要使用内联 JavaScript(在 HTML 中)。JS 应该在一个地方,那就是您的 JS 文件或
<script>
标签内。它更容易调试和维护。
单个复选框
const EL_submitBtn = document.querySelector('#submitBtn');
const EL_acceptCkb = document.querySelector('[name="accept"]');
function submitCheck(ev) {
ev.preventDefault(); // prevent follow link
if (!EL_acceptCkb.checked) { // Unchecked
alert("You will not get a better UX");
} else { // Checked
alert("Yes! Buckle up!")
document.location = EL_submitBtn.getAttribute('href');
}
}
EL_submitBtn.addEventListener('click', submitCheck);
<div>
<h3>Would you like a better UX?</h3>
<label>
<input type="checkbox" name="accept"> Yes I do
</label>
</div>
<a id="submitBtn" href="https://www.google.com">Submit</a>
两个单选按钮
- 用于
document.querySelector('[name="accept"]:checked')
获取选中的,如果有的话。
const EL_submitBtn = document.querySelector('#submitBtn');
function submitCheck(ev) {
ev.preventDefault(); // prevent follow link
const EL_acceptCkd = document.querySelector('[name="accept"]:checked');
if (!EL_acceptCkd) { // None checked
alert("You must select Yes or No.");
} else if (EL_acceptCkd.value === 'no') { // "NO" checked
alert("You will not get a better UX");
} else { // "YES" checked
alert("Yes! Buckle up!")
document.location = EL_submitBtn.getAttribute('href');
}
}
EL_submitBtn.addEventListener('click', submitCheck);
<div>
<h3>Would you like a better UX?</h3>
<label>
<input type="radio" name="accept" value="yes"> Yes
</label>
<label>
<input type="radio" name="accept" value="no"> No
</label>
</div>
<a id="submitBtn" href="https://www.google.com">Submit</a>
推荐阅读
- stripe-payments - Stripe - 使用时间表在期末降级
- c++ - opencv连接细线
- mysql - 为什么 MariaDB 拒绝创建一个错误 [42000][1064] 的简单表?
- android - 如何获取我自己的安卓蓝牙mac地址
- c# - C# 多级继承 - 相同的方法
- twilio - 用于发送语音邮件 URL 的 Twilio Studio 功能
- r - 求一列数据的均值
- c - C使用void函数来计算文件的总和
- parsing - C# ANTLR4 DefaultErrorStrategy 或自定义错误侦听器不会捕获无法识别的字符
- kotlin - 如何在 tornadofx 中使用国际化