javascript - Rails 简单形式 Bootstrap Javascript

标签 javascript ruby-on-rails twitter-bootstrap simple-form

我有一个带有 Bootstrap 和简单形式的 Rails 4 应用程序。

我有一个简单的数据表格。

它有一个主要问题,如果回答正确,则需要一个后续问题。我想隐藏后续问题,直到第一个问题回答正确为止。

我为后续问题 (survey-link-data) 上方的标签定义了一个单独的 CSS 类,以便隐藏该标签并与输入字段一起显示。这个 JS 是不正确的 - 它没有像我希望的那样隐藏然后显示。

请你看看我做错了什么?谢谢。

这是我针对(@datum)问题的两个简单表格:

<%= f.input :survey, :as => :boolean, :label => false, inline_label: 'Do you need survey responses?'  %>
<br><br>


    <%= f.input :survey_link, label: 'Where is your survey?', :label_html => { :class => 'data-survey-link' }, placeholder: 'Include a link to your survey', :input_html => {:style=> 'width: 650px; margin-top: 20px',  class: 'response-project'} %>

这是我的 JS 脚本:

<script>
$(function() {
    // Hide the survey_link input

    $('input[name="datum[survey_link]"]').hide();
    $('.data-survey-link').hide();
    // When the survey checkbox changes
    $('input[name="datum[survey]"]').change(function() {
         // If the survey checkbox is ticked
         if(this.checked) {
              // Survey checkbox was ticked - show the survey_link input
              $('input[name="datum[survey_link]"]')toggle(this.checked);
              $('.data-survey-link').show();

         } else {
              // Survey checkbox was unticked - hide the survey_link input
              $('input[name="datum[survey_link]"]').hide();
              $('.data-survey-link').hide();

         }
    });
});
</script>

最佳答案

首先,您要选择并隐藏两个元素(标签和输入),这比隐藏/显示包装器的效率要低(默认情况下 simple_form 将输入和标签包装在特殊的 div 中) > 标签)。让我们给这个包装器一个类:

<%= f.input :survey_link, wrapper_html: { class: 'survey-link-wrapper' } %>

为了简单起见,我删除了其余选项。

您最初可以使用 CSS 隐藏它:

.survey-link-wrapper {
  display:  none;
}

其次,为第一个输入创建一个更高效的选择器:

<%= f.input :survey, input_html: { class: 'survey-checkbox' } %>

那么你的 javascript 代码就变成了这样:

<script>
$(function() {
    var $surveyLinkWrapper = $('.survey-link-wrapper');
    $('.survey-checkbox').change(function(e) {
         // If the survey checkbox is ticked
         if ( $(this).is(":checked") )  {
              // Survey checkbox was ticked - show the survey_link input
              $surveyLinkWrapper.show();
         } else {
              $surveyLinkWrapper.hide();
         }
    });
});
</script>

更清晰、更容易阅读。

关于javascript - Rails 简单形式 Bootstrap Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26080765/

相关文章:

javascript - 使用 Angular 中的一个管道过滤表中的多列

ruby-on-rails - 在 Ruby on Rails 中管理用户(和所有权)

ruby-on-rails - 在ActiveRecord子类中覆盖 '=='方法有意义吗?

javascript - AngularJS Bootstrap 导航栏

jquery - 从模型的输入中获取值(value)

javascript - if 语句匹配数组

javascript - Webpack:将动态导入的模块拆分为单独的 block ,同时将库保留在主包中

javascript - 完成上一个函数后运行函数

ruby-on-rails - 在 Rails 4 中使用 minitest 测试强参数

jquery - Twitter Bootstrap - 标签 - URL 不会改变