jquery - JQuery禁用提交按钮,直到表单完全填满
问题描述
我正在尝试实现一个 jquery 函数来禁用提交按钮,直到所有值都被填满,请帮忙,因为我似乎没有找到解决方案。我哪里出错了?
这是html:
<form action="{% url 'register' %}" id="registerform" class="sign-up-form" method="POST">
{% csrf_token %}
<h2 class="title">Sign up</h2>
<div class="row">
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-user"></i>
<input type="text" name="firstname" placeholder="First name"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-user"></i>
<input type="text" name="secondname" placeholder="Second name"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field userfield">
<i class="fas fa-user"></i>
<input type="text" id="id_username" name="username" placeholder="Username"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field emailfield">
<i class="fas fa-envelope"></i>
<input type="email" id="id_email" name="email" placeholder="Email"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-lock-open"></i>
<input type="number" name="idno" placeholder="ID/Passport Number"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-user-ninja"></i>
<input type="text" name="nationality" placeholder="Nationality"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field passfield">
<i class="fas fa-lock"></i>
<input type="password" id="password" onkeyup="checkPasswordStrength();" name="password"
placeholder="Password"/>
</div>
</div>
<div class="col-md-6">
<div class="input-field cpassfield">
<i class="fas fa-lock"></i>
<input type="password" id="cpassword" onkeyup="cpassword();"
placeholder="Confirm Password"/>
</div>
</div>
</div>
<input type="submit" id="register" class="btn" style="background-color: #5995fd;!important;"
value="Sign up" disabled/>
<p class="copy-text">©2020. All Rights Reserved</p>
<h3 class="copy-text"> Kenya Airways</h3>
</form>
和javascript:
<script>
//disable submit button
(function () {
$('#registerform > input').keyup(function () {
var empty = false;
$('#registerform> input').each(function () {
if ($(this).val() == '') {
empty = true;
}
});
if (empty) {
$('#register').attr('disabled', 'disabled');
} else {
$('#register').removeAttr('disabled');
}
});
})()
</script>
请帮我解决上述问题,因为即使提交了所有表单,该按钮仍处于禁用状态。
解决方案
您的选择器错误(表单 > 输入)
您没有访问不是表单直接子项的输入字段
最简单的解决方案:在必须填写的字段中添加必填项
否则试试这个不显眼的版本
const checkPasswordStrength = () => { return true}; // replace with yours
const cpassword = () => { return true };
$(function() {
const $inputs = $('#registerform :input');
$inputs.on("input", function() {
let valid = true;
if (this.id === "password") valid = valid && checkPasswordStrength()
else if (this.id === "cpassword") valid = valid && cpassword()
const empty = $inputs.filter(function() {
return $(this).val().trim() == ''}).get();
valid = valid && empty.length===0;
$('#register').attr('disabled', !valid);
}).trigger('input')
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="{% url 'register' %}" id="registerform" class="sign-up-form" method="POST">
<h2 class="title">Sign up</h2>
<div class="row">
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-user"></i>
<input type="text" name="firstname" placeholder="First name" />
</div>
</div>
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-user"></i>
<input type="text" name="secondname" placeholder="Second name" />
</div>
</div>
<div class="col-md-6">
<div class="input-field userfield">
<i class="fas fa-user"></i>
<input type="text" id="id_username" name="username" placeholder="Username" />
</div>
</div>
<div class="col-md-6">
<div class="input-field emailfield">
<i class="fas fa-envelope"></i>
<input type="email" id="id_email" name="email" placeholder="Email" />
</div>
</div>
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-lock-open"></i>
<input type="number" name="idno" placeholder="ID/Passport Number" />
</div>
</div>
<div class="col-md-6">
<div class="input-field">
<i class="fas fa-user-ninja"></i>
<input type="text" name="nationality" placeholder="Nationality" />
</div>
</div>
<div class="col-md-6">
<div class="input-field passfield">
<i class="fas fa-lock"></i>
<input type="password" id="password" name="password" placeholder="Password" />
</div>
</div>
<div class="col-md-6">
<div class="input-field cpassfield">
<i class="fas fa-lock"></i>
<input type="password" id="cpassword" placeholder="Confirm Password" />
</div>
</div>
</div>
<input type="submit" id="register" class="btn" style="background-color: #5995fd;!important;" value="Sign up" disabled/>
<p class="copy-text">©2020. All Rights Reserved</p>
<h3 class="copy-text"> Kenya Airways</h3>
</form>
推荐阅读
- leaflet - 不添加带有传单地图和 L.Routing.control 的添加 css 的自定义标记
- datetime - 在给定时间之间创建随机分钟日期
- python - 带有小马 0.7 的 Python 3.6 在提交到 oracle db 时出错
- mysql - 如何在 LEFT JOIN 上使用 LIMIT?
- model - TYPO3 Extbase - 计算属性并添加到数据库
- kotlin - 默认情况下对象是否共享相同的内存地址
- python - Python external_dependencies:“google-cloud-pubsub”不起作用
- python-3.x - 使用 Selenium 抓取 Web 体育赔率
- ios - IOS 邮件应用程序中不再显示自定义文件类型
- python-3.x - Dask groupby 作为一个独特的框架 - 如何?