【问题标题】:Implement show/hide functionality using javascript in rails application在 Rails 应用程序中使用 javascript 实现显示/隐藏功能
【发布时间】:2016-11-04 14:29:34
【问题描述】:

实际上,我想在我的 rails 应用程序中执行 javascript 代码。

我在“app/assets/javascripts”中创建了 custom.js 新文件。

custom.js

$( document ).ready(function() {
    $("div#test").hide();
    $("a").click(function(event) {
        event.preventDefault();
        $("div#test").fadeToggle();
    });
});

我还添加了,//= 在 application.js 文件中需要自定义,但代码并没有从一开始就隐藏。

应用程序.js

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap-sprockets
//= require nicetitle
//= require custom

index.html.erb

<a href="#" class="toggle-formed" style="float: right;" >Search</a>

                <div id="sample" class="<%= @xvaziris_data.present? ? 'hidden' : '' %>">

                    <%= form_tag xvaziris_path, method: 'get', class: "form-group", role: "search" do %>
                    <p>
                        <center><%= text_field_tag :search, params[:search], placeholder: "Search for.....", class: "form-control-search" %>
                            <%= submit_tag "Search", name: nil, class: "btn btn-md btn-primary" %></center>
                        </p>
                        <% end %><br>

                        <% if @xvaziris.empty? %>

                        <center><p><em>No results found for.</em></p></center>              

                        <% end %>

                    </div>

general.scss

.hidden {
  display: none;
}

上面的 custom.js 代码,当我将 index.html.erb 放在 javascript 脚本标记下时,它可以正常工作。但我不想在所有其他控制器/索引中重复自己,因为导轨遵循 DRY 原则,即不要重复自己。

搜索.js

$(document).on('page:change', function () {
        $("div#sample").hide();

    //    | === HERE
    $("a.toggle-formed").click(function(event) {
        event.preventDefault();
        $("div#sample").fadeToggle();
    });
});

欢迎提出任何建议。

提前谢谢你。

【问题讨论】:

  • 您的 custom.js 在您放入 application.js 时在您的页面中可用
  • 感谢您的回复。 custom.js 文件位于“app/assets/javascripts”下,它是一个单独的文件。
  • 是的,但必须用&lt;script&gt;标签括起来
  • 我认为您不需要 //= require custom 将 custom.js 添加到 javascripts/ 中就足够了。我自己对此进行了测试,它在我的构建中运行良好。
  • 添加后是否尝试重启服务器

标签: javascript ruby-on-rails


【解决方案1】:

而不是在准备好的文档上隐藏 div。您可以将 display: none; 与 css 一起使用。然后,当您的文档加载时,fadeToggle() 仍然可以使用它。

你也应该考虑使用

$(document).on('page:change', function () {

因为涡轮链接。有时,turbolink 会在不加载页面的情况下更改页面,并且不会调用准备好的文档。

【讨论】:

  • 太棒了!它可以工作,如果想要实现搜索,因为我不想在搜索某些东西时隐藏,但我想让它打开几秒钟,或者当我触发关闭时它必须关闭。希望你理解这件事。
【解决方案2】:

@Joe's answer添加更多内容:

因此,当您需要实现搜索时,您可以这样做:

在你的css中添加一个类hidden类写:

.hidden {
  display: none;
}

所以当页面加载时检查搜索数据是否存在然后不要添加类hidden 或者添加它。示例:

<div id="test" class="<%= search_data.present? ? 'hidden' : '' %>">

所以这会在搜索数据存在时显示出来。

希望这会有所帮助。

【讨论】:

  • 感谢您的回复。但是我收到了这个错误 undefined local variable or method `search_data' for #:0x00000009240dc0>
  • search_data 名称只是一个示例,请将其替换为您从控制器获取数据的实例变量。
  • 谢谢。我添加了 search.js 作为参考。它需要任何修改吗?当我单击搜索时,它再次切换回隐藏...
  • 最初看到如果你添加hidden 类,搜索将被隐藏。现在,当用户搜索某些内容时,您将为他找到一些结果。因此,在视图上检查它是否存在,如果存在则不要将hidden 类添加到它。或者添加它。我在上面给出了同样的例子。
  • 制作这个:class="&lt;%= @xvaziris_data.present? ? 'hidden' : '' %&gt;"class="&lt;%= @xvaziris.present? ? 'hidden' : '' %&gt;" 并尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多