我有一个包含3个表的页面:
<table id="t1">
<tr>
<td></td><td><input type="text" name="name" /></td>
<td></td><td><input type="text" name="id" /></td>
<td></td><td><input type="text" name="perDate" /></td>
<td></td><td><input type="text" name="email" /></td>
</tr>
</table>
<table id="t2">
<tr>
<td></td><td><input type="text" name="lostFound" /></td>
<td></td><td><input type="text" name="lostDate" /></td>
<td></td><td><input type="text" name="item" /></td>
</tr>
</table>
<table id="t3">
<tr>
<td></td><td><input type="text" name="check" /></td>
<td></td><td><input type="text" name="reason" /></td>
<td></td><td><input type="text" name="chkDate" /></td>
</tr>
</table>
所以,我有一个验证脚本,如果我只是将类更改为'required'那么它将使该输入字段成为必需。我遇到的问题是....如果填写了该表中的另一个字段,我只想要一个字段,否则该字段不是必需的。例如:如果填写了t1 - name,那么我想将t1-id,t1-perDate和t1-mail的类更改为'required',并保留t2和t3的所有其他类不变。我想知道是否有人可以通过某种类型的javascript代码指出我正确的方向,这将使这成为可能。感谢所有帮助,如果需要更多信息,请询问。
答案 0 :(得分:1)
因此,当您模糊“名称”输入时,如果提供了名称,则需要相邻的输入。但是如果他们回去并决定清除那个名字字段,也不要忘记让他们不需要:
$('.t1 input[name=name]').blur(function(){
var $depends = $('.t1 input[name=id], .t1 input[name=perDate], .t1 input[name=email]');
if($(this).val() != "")
$depends.addClass('required');
else
$depends.removeClass('required');
});
此外,如果您尝试更改所需的属性,如果任何控件都有数据,您可以执行以下操作:
//blur even on each input in t1
$('.t1 input').blur(function(){
//store as variable
var $t1in = $('.t1 input');
var hasData = false;
//check all inputs and if one has data, set variable and exit
$t1in.each(function(){
if($(this).val().length > 0){
hasData = true;
//exit loop
return false;
}
});
//if any of the controls has data
if(hasData)
$t1in.addClass('required');
else
$t1in.removeClass('required');
});
答案 1 :(得分:0)
如果你要使用jQuery或任何其他JS库,你可以很容易地做这样的事情:
$('#t1 input[name=name]').change(function()
{
var dependents = $('#t1 input[name=id],
#t1 input[name=perDate],
#t1 input[name=email]');
if (this.value.length > 0)
{
dependents.addClass('required');
}
else
{
dependents.removeClass('required');
}
});
答案 2 :(得分:0)
<style>
.required { border:2px solid red }
</style>
<script>
function checkFilled(field) {
var fields = field.parentNode.parentNode.getElementsByTagName('input');
for (i = 0; i < fields.length; i++) {
fields[i].className = field.value != '' ? 'required' : '';
}
}
</script>
<table id="t1">
<tr>
<td></td><td><input type="text" name="name" onkeydown="checkFilled(this)" onkeyup="checkFilled(this)" onchange="checkFilled(this)" /></td>
<td></td><td><input type="text" name="id" /></td>
<td></td><td><input type="text" name="perDate" /></td>
<td></td><td><input type="text" name="email" /></td>
</tr>
</table>
<table id="t2">
<tr>
<td></td><td><input type="text" name="lostFound" onkeydown="checkFilled(this)" onkeyup="checkFilled(this)" onchange="checkFilled(this)" /></td>
<td></td><td><input type="text" name="lostDate" /></td>
<td></td><td><input type="text" name="item" /></td>
</tr>
</table>
<table id="t3">
<tr>
<td></td><td><input type="text" name="check" onkeydown="checkFilled(this)" onkeyup="checkFilled(this)" onchange="checkFilled(this)" /></td>
<td></td><td><input type="text" name="reason" /></td>
<td></td><td><input type="text" name="chkDate" /></td>
</tr>
</table>
添加所有onkeydown
,onkeyup
和onchange
非常有用。 onchange
对于在现场粘贴很有用。