Rails f.check_box 隐藏/显示 JS

Posted

技术标签:

【中文标题】Rails f.check_box 隐藏/显示 JS【英文标题】:Rails f.check_box hide/show JS 【发布时间】:2016-03-23 14:20:48 【问题描述】:

我无法在 Rails 表单中的复选框上隐藏默认标签。我有一个自定义标签,无论我尝试什么,我总是会显示列名。我还尝试将此复选框用作模型提交,还用于触发 div 隐藏/显示事件,但我似乎也无法使其正常工作。

<div class="form-group">
    <label class="col-sm-4 control-label">Minor?:</label>
    <div class="col-sm-8">
        <%= f.check_box :minor %>
    </div>
</div>

这是我的隐藏/显示 js

<script type="text/javascript">
  var checkbox = document.getElementById('customers_minor');
  var details_div = document.getElementById('minor_details');
  checkbox.onchange = function() 
     if(this.checked) 
       details_div.style['display'] = 'block';
      else 
       details_div.style['display'] = 'none';
     
  ;
</script>

编辑/解决方案 我已经弄清楚如何通过将do 添加到标签行来添加自定义标签。 &lt;%= f.check_box :minor do %&gt;Custom Label&lt;% end %&gt;

<label for="customer_minor">
    <input name="customer[minor]" type="hidden" value="0">
    <input id="customer_minor" name="customer[minor]" type="checkbox" value="1">
Custom Label
</label>

【问题讨论】:

如果您也向我们展示生成的 html,将会有所帮助。你确定id 属性是customers_minor 吗?根据您使用的 builder gem 的不同,它可能会有所不同。 我对帖子进行了一些编辑,您可能想查看一下。 应该是customer_minor(单数)而不是customers_minor(复数)。 另外,使用onclick,而不是onchange,因为这是一个复选框,而不是一个文本字段。 onclick 事件相当于 onchange 复选框。 有没有办法在显示后实现平滑的jquery滚动到div? 【参考方案1】:

id 属性的值实际上是customer_minor,而不是customers_minor(单数与复数)。

此外,复选框不会对onchange 事件做出反应,因为它的值不会改变。您应该改用onclick 事件;这也适用于键盘触发的事件(即,使用制表符聚焦并按下空格键)。

【讨论】:

【参考方案2】:

隐藏/显示 JS 可以这样解决:

#app/assets/javascripts/application.js
var checkbox    = document.getElementById('customer_minor');
var details_div = document.getElementById('minor_details');

checkbox.onchange = function() 
   if(this.checked) 
     details_div.style['display'] = 'block';
    else 
     details_div.style['display'] = 'none';
   
;

您的id 似乎不正确(您可以see working JSFiddle here)。

--

您还应该确保将 JS 放入资产管道文件中——app/assets/javascripts/application.js 等。

【讨论】:

完美,如何实现对 div 的平滑滚动? 这将是另一个问题,如果您提供链接,我会回答! 对不起,有什么链接?

以上是关于Rails f.check_box 隐藏/显示 JS的主要内容,如果未能解决你的问题,请参考以下文章

带有 JQuery 的 Rails 5:带有显示和隐藏 JQuery 切换的表单最初会显示,但在我刷新页面后会隐藏起来

Rails 简单的表单输入显示/隐藏

Rails、Simple Form 和 Javascript 显示/隐藏脚本

Rails,如果多个文本框为空,如何隐藏/显示按钮? [关闭]

如何在 Rails 中执行 AJAX-y 条件显示/隐藏表单字段?

在 Rails 中显示/隐藏部分/模板的更干燥的方式