【发布时间】:2016-02-11 13:48:58
【问题描述】:
我有许多输入的表格列表,并在过滤器选项中进行选择。检查此字段是否有内容的目标(例如输入不为空,并且 select 已选择选项)。我不明白如何使它与这些元素中的一个以上一起工作,因为现在如果两个输入具有值并且一个输入要清除,尽管其中一个输入具有值,但它会将按钮设置为禁用。帮我处理一下。
function buttonStatus() {
var buttonDisable = function(){
$('input[type="submit"]').attr('disabled', true)
},
buttonEnable = function(){
$('input[type="submit"]').attr('disabled', false);
}
$('input').on('keyup change', function(){
var inputText = $.trim($('input').val())
if(inputText.length > 0 || $('select option').is(':selected') && $('select option:selected').val() != 0) {
buttonEnable()
}
else {
buttonDisable()
}
})
$('select').on('keyup change', function(){
if ($('option').is(':selected') && $('option:selected').val() != 0 || $.trim($('input').val()).length > 0) {
buttonEnable()
}
else {
buttonDisable()
}
})
}
buttonStatus()
* {
box-sizing: border-box;
}
div {
margin: 50px;
}
input[type="submit"] {
background: green;
border: none;
padding: 5px;
color: #fff;
}
input[type="submit"][disabled] {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<input type="text" />
<input type="text" />
<select>
<option value="0"></option>
<option value="1">Nigeria</option>
<option value="2">Kenya</option>
<option value="3">Tanzania</option>
<option value="4">Uganda</option>
<option value="5">Ethiopia</option>
<option value="6">Mozambique</option>
</select>
<select>
<option value="0"></option>
<option value="1">Nigeria</option>
<option value="2">Kenya</option>
<option value="3">Tanzania</option>
<option value="4">Uganda</option>
<option value="5">Ethiopia</option>
<option value="6">Mozambique</option>
</select>
<input type="submit" disabled>
</div>
【问题讨论】:
-
如果我了解您需要获得什么,您的解决方案是使用
$(this)来了解您的目标是什么元素。你可以这样做:var inputText = $.trim($(this).val())。问题出在$('select'),因为$(this)将是选择,而不是输入。如果您在输入标签中放置一个类名或一个 id(两者都不同),这是最简单的。 -
$(this) 有点帮助。
-
我不得不对马科斯刚才所说的话加倍评论。在 function() 中,您可以使用 $(this); 获取当前目标;这是当前范围。您还可以通过函数传递事件“e”;示例函数(e){...}。当尝试编写这样的验证时,命名和标识所有内容要容易得多。这样您就可以准确地挑选出您要检查的输入/选择。