【问题标题】:Changing class of all input fields if one input field is entered如果输入一个输入字段,则更改所有输入字段的类别
【发布时间】:2011-05-16 15:34:06
【问题描述】:

我有一个包含 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>

所以,我有一个验证脚本,如果我只是将类更改为“必需”,那么它将使该输入字段成为必需。我遇到的问题是....如果该表中的另一个字段已填写,我只想要求一个字段,否则不需要该字段。例如:如果 t1 - name 已填写,那么我想将 t1 - id、t1 - perDate 和 t1 - email 的类更改为“必需”,并保留 t2 和 t3 的所有其他类。我想知道是否有人可以使用某种 javascript 代码为我指明正确的方向,从而使这成为可能。感谢所有帮助,如果需要更多信息,请询问。

【问题讨论】:

  • 你在使用 jQuery 或 MooTools 之类的 JS 库吗?

标签: javascript validation forms


【解决方案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');
});

【讨论】:

  • @pixel ,谢谢,我要试试这个,但是如果他们只填写 t1 - id 的话,这会起作用吗....会使其他字段成为必需的吗?
  • @Jonathon:好的。因此,如果我理解正确,您是否想要它以便填充 t1 中的任何字段,这将需要整个部分,对吗?
  • @pixel ,感谢您的快速响应,是的,这是正确的,如果填充了 t1 中的任何字段,它将需要整个部分。
  • @Jonathon:嘿,看看我更新的答案。如果 t1 中的任何控件失去焦点,它将检查 t1 中的所有输入,确定是否有任何值,然后一旦它达到一个值,它将继续并向所有输入添加所需的类,否则如果一切都是空的,它将删除“必需”类。请记住,您也可以将其包装在一个函数中,您可以将“t1”或“t2”传递给并使用$(this).find('input') 设置子输入控件。
  • @pixel ,使用这个时需要额外的jQuery插件吗?
【解决方案2】:

如果您要使用 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');
    }
});

【讨论】:

  • 更好:dependents.toggleClass('required', this.value.length &gt; 0)
【解决方案3】:
<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>

添加所有onkeydownonkeyuponchange 很有用。 onchange 可用于在字段中粘贴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-23
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 2017-01-10
    • 2022-12-15
    相关资源
    最近更新 更多