Javascript - 根据表单选择切换 html5 所需的 =""属性

标签 javascript html

我有一个即将完成的脚本,但我无法弄清楚最后一部分。 Javascript 使复选框根据下拉选择显示或消失(这非常有效)。但如果该复选框存在(我无法弄清楚的部分),我会尝试将该复选框设置为“必需”。

我在复选框字段上使用了 htm5 required="" 属性,但即使选择了第三个选项,表单仍会尝试验证它,这会完全隐藏复选框。

有没有办法根据下拉列表的选择或任何其他建议来打开/关闭required=""

<script>    
   function getTerms(select){
        var selectedString = select.options[select.selectedIndex].value;
        if(selectedString == "1" || selectedString == "2")
        {
            document.getElementById("terms_target").style.display = "block";
        }else {
            document.getElementById("terms_target").style.display = "none";
        }
    }
</script>

<form action="process_affiliate.php" method="post" onchange="getTerms(this)" >
<select name="InquiryType" required="">
    <option value="">Please Select Your Inquiry Type</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
</select>
<div id="terms_target" style="display:none;">
  <input type="checkbox" name="checked" value="Checked" required="" />I agree to the terms
</div>
<input type="submit" value="Submit">
</form>

最佳答案

这是使用 addEventListener 的较新版本

window.addEventListener("DOMContentLoaded", () => {
  const sel = document.querySelector("[name=InquiryType]"),
    terms = document.getElementById("terms_target"),
    form = document.getElementById("myForm"),
    agree = form.checked; // checked is a poor name for a field
  toggleAgree = () => {
    const show = ["1", "2"].includes(sel.value);
    terms.hidden = !show;
    agree.required = show;
  };
  sel.addEventListener("change", toggleAgree)
  toggleAgree(); // initialise
})
<form action="process_affiliate.php" id="myForm" method="post">
  <select name="InquiryType" required>
    <option value="">Please Select Your Inquiry Type</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
  </select>
  <div id="terms_target" hidden>
    <input type="checkbox" name="checked" value="Checked" required="" />I agree to the terms
  </div>
  <input type="submit" value="Submit">
</form>

旧版本

window.onload=function() {
  var sel = document.getElementsByName("InquiryType")[0];
  sel.onchange=function() {
    var selectedString = this.value,
        show = selectedString == "1" || selectedString == "2",
        terms = document.getElementById("terms_target"),
        checked=document.getElementsByName("checked")[0];
    terms.style.display = show?"block":"none";
    if (show) checked.setAttribute("required","required");
    else checked.removeAttribute("required");
  }
  sel.onchange(); // initialise
}
<form action="process_affiliate.php" method="post">
<select name="InquiryType" required="">
    <option value="">Please Select Your Inquiry Type</option>
    <option value="1">Option 1</option>
    <option value="2">Option 2</option>
    <option value="3">Option 3</option>
</select>
<div id="terms_target" style="display:none;">
  <input type="checkbox" name="checked" value="Checked" required="" />I agree to the terms
</div>
<input type="submit" value="Submit">
</form>

关于Javascript - 根据表单选择切换 html5 所需的 =""属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29036718/

相关文章:

javascript - 理论上是否可以创建一个 'window' 以使用 HTML 和 JavaScript 在 div 后面查看?

javascript - 从逗号分隔的字符串javascript中删除空值

javascript - Angular 2+ 添加或删除属于另一个组件的元素的类

javascript - 根据对象数组对字符串数组进行排序

html - 使用 CSS 的文本倾斜边距

javascript - 作为 js 或 css 的 HTML 文件

javascript - 如何使滚动像单击滚动条箭头一样真实?

javascript - 数组作为默认参数在 Javascript 中安全吗?

javascript - 如何将PowerPoint图表转换为网络使用?

Javascript:onbeforeunload何时触发?