我有一个有两个选择框和文本输入的表单。在更改这3个元素中的任何一个元素时,我希望运行一个检查,看看其中任何元素是否为空(没有值),然后更改一个变量。以下是我迄今尝试过的:
var emptyFields = true;
var inputs = $('input[type="text"], select').on('keyup change', function() {
inputs.each(function() {
var elm = $(this),
val = elm.val();
if ((val != '0' && elm.is('select')) || (val != '' && elm.is('input'))) {
emptyFields = false;
return false;
}
});
$('.info span').text(emptyFields);
});
.info {
margin-top:20px;
}
span {
font-weight:bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option selected disabled>SELECT AN OPTION</option>
<option>One</option>
<option>Two</option>
<option>Three</option>
</select>
<select>
<option selected disabled>SELECT AN OPTION</option>
<option>Four</option>
<option>Five</option>
<option>Six</option>
</select>
<input type="text" />
<div class="info">Empty fields? <span></span></div>
我现在面临的问题是,即使在所有3个元素都有一个值之前,变量就已经更改为false
了。如果要从左到右完成元素,则在每个false
框中进行选择之后,在向text input
中输入字符之前,变量不应返回select
。
发布于 2017-10-16 12:51:13
第一个问题:一旦在检查期间将变量设置为false
,就不会在以后的检查中将其更改为true
。您应该使用一个局部变量,每次调用该函数时都初始化该变量。
第二个问题:你把支票倒过来了。由于要向true
显示任何字段是否为空,所以需要将变量初始化为false
,然后在找到空字段时将其设置为true
。
var inputs = $('input[type="text"], select').on('keyup change', function() {
var emptyFields = false;
inputs.each(function() {
var elm = $(this),
val = elm.val();
if ((val == '0' && elm.is('select')) || (val == '' && elm.is('input'))) {
emptyFields = true;
return false;
}
});
$('.info span').text(emptyFields);
});
.info {
margin-top:20px;
}
span {
font-weight:bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option selected disabled>SELECT AN OPTION</option>
<option>One</option>
<option>Two</option>
<option>Three</option>
</select>
<select>
<option selected disabled>SELECT AN OPTION</option>
<option>Four</option>
<option>Five</option>
<option>Six</option>
</select>
<input type="text" />
<div class="info">Empty fields? <span></span></div>
https://stackoverflow.com/questions/46778711
复制相似问题