【问题标题】:Expand form based on radio selection in jQuery & Bootstrap基于 jQuery 和 Bootstrap 中的单选选择的扩展表单
【发布时间】:2016-07-11 21:10:54
【问题描述】:

我正在尝试根据访问者的输入显示表单的一部分。目前,每当我更改单选按钮值时,它仍然会继续显示最后一次选择的表单部分。我想要我的表单做的是,当用户更改 <input type="radio"> 的值并且当它只是使表单的一部分可见时,让它再次消失,因为它不是必需的。我想当我将我的代码当前代码粘贴到此处并亲自查看那里出了什么问题时,您可以了解我想要什么:

$(document).ready(function() {
	$('input[name="Selection"]').click(function() {
  	if($(this).attr('id') == 'Selection-1')
    {
    	$("#Selection-1-container").toggleClass('hidden');
    }
    else if($(this).attr('id') == 'Selection-2')
    {
    	$("#Selection-2-container").toggleClass('hidden');
    }
  });
});
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="form-group">
  <label class="control-label col-md-2" for="Selection">Selection</label>
  <div class="col-md-10">
    <div class="radio">
      <label for="Selection-0">
        <input type="radio" name="Selection" id="Selection-0" value="Value-1" checked="checked">
        When this one selected, neither 'Selection' of the code below.
      </label>
    </div>
    <div class="radio">
      <label for="Selection-1">
        <input type="radio" name="Selection" id="Selection-1" value="Value-2">
        When this one selected, show Selection-1 only.
      </label>
    </div>
    <div class="radio">
      <label for="Selection-2">
        <input type="radio" name="Selection" id="Selection-2" value="Value-3">
        When this one selected, show Selection-2 only.
      </label>
    </div>
  </div>
</div>
<div id="Selection-1-container" class="hidden">
  <h4>Selection 1</h4>
  <hr>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column1">Column1</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column1" name="Column1" type="text"
             placeholder="Column1" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column2">Column2</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column2" name="Column2" type="text"
             placeholder="Column2" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column3">Column3</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column3" name="Column3" type="text"
             placeholder="Column3" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column4">Column4</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column4" name="Column4" type="text"
             placeholder="Column4" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column5">Column5</label>
    <div class="col-md-10">
      <select class="form-control" id="Column5" name="Column5" required>
        <option value>Choose an option...</option>
        <option value>Option 1</option>
      </select>
    </div>
  </div>
</div>
<div id="Selection-2-container" class="hidden">
  <h4>Selection 2</h4>
  <hr>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column6">Column6</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column6" name="Column6" type="text"
             placeholder="Column6" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column7">Column7</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column7" name="Column7" type="text"
             placeholder="Column7" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column8">Column7</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column8" name="Column8" type="text"
             placeholder="Column8" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column9">Column9</label>
    <div class="col-md-10">
      <input class="form-control text-box single-line" id="Column9" name="Column9" type="text"
             placeholder="Column9" required>
    </div>
  </div>
  <div class="form-group">
    <label class="control-label col-md-2" for="Column10">Column10</label>
    <div class="col-md-10">
      <select class="form-control" id="Column10" name="Column10" required>
        <option value>Choose an option...</option>
        <option value>Option 1</option>
      </select>
    </div>
  </div>
</div>

有没有人可以建议我应该添加什么(我假设我的 javascript 代码)以使其完全按照我想要的方式工作?

【问题讨论】:

    标签: javascript jquery html forms twitter-bootstrap


    【解决方案1】:

    您可以向需要隐藏的元素添加一个类(如togglehid)。 然后,如果您点击 any 复选框,隐藏这些类。之后,一个变得可见。

     $(document).ready(function() {
        	$('input[name="Selection"]').click(function() {
    
              $('.togglehid').addClass('hidden');
              // code changed here --> add the class hidden to all div's with class togglehid
    
          	if($(this).attr('id') == 'Selection-1')
            {
            	$("#Selection-1-container").toggleClass('hidden');
            }
            else if($(this).attr('id') == 'Selection-2')
            {
            	$("#Selection-2-container").toggleClass('hidden');
            }
          });
        });
        <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <div class="form-group">
          <label class="control-label col-md-2" for="Selection">Selection</label>
          <div class="col-md-10">
            <div class="radio">
              <label for="Selection-0">
                <input type="radio" name="Selection" id="Selection-0" value="Value-1" checked="checked">
                When this one selected, neither 'Selection' of the code below.
              </label>
            </div>
            <div class="radio">
              <label for="Selection-1">
                <input type="radio" name="Selection" id="Selection-1" value="Value-2">
                When this one selected, show Selection-1 only.
              </label>
            </div>
            <div class="radio">
              <label for="Selection-2">
                <input type="radio" name="Selection" id="Selection-2" value="Value-3">
                When this one selected, show Selection-2 only.
              </label>
            </div>
          </div>
        </div>
    
        <div id="Selection-1-container" class="togglehid hidden">
        <!-- code changed here too, added the class -->
    
    
          <h4>Selection 1</h4>
          <hr>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column1">Column1</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column1" name="Column1" type="text"
                     placeholder="Column1" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column2">Column2</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column2" name="Column2" type="text"
                     placeholder="Column2" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column3">Column3</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column3" name="Column3" type="text"
                     placeholder="Column3" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column4">Column4</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column4" name="Column4" type="text"
                     placeholder="Column4" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column5">Column5</label>
            <div class="col-md-10">
              <select class="form-control" id="Column5" name="Column5" required>
                <option value>Choose an option...</option>
                <option value>Option 1</option>
              </select>
            </div>
          </div>
        </div>
    
        <div id="Selection-2-container" class="togglehid hidden">
        <!-- code changed here too, added the class -->
    
    
          <h4>Selection 2</h4>
          <hr>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column6">Column6</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column6" name="Column6" type="text"
                     placeholder="Column6" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column7">Column7</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column7" name="Column7" type="text"
                     placeholder="Column7" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column8">Column7</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column8" name="Column8" type="text"
                     placeholder="Column8" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column9">Column9</label>
            <div class="col-md-10">
              <input class="form-control text-box single-line" id="Column9" name="Column9" type="text"
                     placeholder="Column9" required>
            </div>
          </div>
          <div class="form-group">
            <label class="control-label col-md-2" for="Column10">Column10</label>
            <div class="col-md-10">
              <select class="form-control" id="Column10" name="Column10" required>
                <option value>Choose an option...</option>
                <option value>Option 1</option>
              </select>
            </div>
          </div>
        </div>

    【讨论】:

    • 谢谢,这看起来是一个不错的解决方案,我会看看我是否能做出这样的工作。不过,拥有两个具有完全相同 CSS 的相同类看起来有点蹩脚,所以我想知道是否有更好的方法来做到这一点。我想这归结为在运行if 语句之前,每次点击后将#Selection-1-container#Selection-2-container 重置为隐藏。
    • 我使用一个类来隐藏它们并使用不同的类来显示它们的原因是因为您不想为许多类编写toggle 函数。它根本不可读。我更喜欢在我的 HTML 元素中使用更多类,并将这些类组用于我的函数。这就是它们的意义(如果你想要唯一的类名,你应该使用 id 代替)
    • 是的,我还注意到可以在 JavaScript 中使用多行,尽管这又看起来像重复代码片段:$("#Bezorging-1-container").addClass('hidden');$("#Bezorging-2-container").addClass('hidden'); 并且在 if 语句中它们应该被简单地删除。 class="hidden" 属性主要用于在对无线电输入进行任何操作之前将这些元素初始化为隐藏状态。您只需将两个单独的 id 替换为一个类,我认为这对可读性来说是正确的。
    猜你喜欢
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多