2012-08-08 31 views
8

Trong application.html.erb tôi, tôi có như sau:Rails: Bootstrap và thả xuống không làm việc

<head> 
    <title><%= title %></title> 
    <%= stylesheet_link_tag "application", media: 'all' %> 
    <%= javascript_include_tag "application" %> 
    <%= javascript_include_tag "https://js.stripe.com/v1/", "application" %> 
    <%= csrf_meta_tags %> 
    <%= tag :meta, :name => "stripe-key", :content => STRIPE_PUBLIC_KEY %> 
    <%= javascript_include_tag "http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js", "application" %> 
    <%= render 'layouts/shim' %> 
</head> 

Trong gemfile của tôi, tôi đã điều sau đây:

gem 'twitter-bootstrap-rails' 
gem 'bootstrap-datepicker-rails' 

Trong quan điểm của tôi \ layouts_header.html.erb, tôi có:

<li class="dropdown" id="admin_menu"> 
    <a class="dropdown-toggle" data-toggle="dropdown" data-target="#admin_menu"> 
     <%= ADMIN_TITLE %> 
     <b class="caret"></b> 
    </a> 
    <ul class="dropdown-menu"> 
     <% Admin_menu.each do |menu_text, menu_action| %> 
      <li><a href="<%= menu_action %>"><%= menu_text %></a></li> 
     <% end %> 
    </ul> 
    </li> 

Admin_menu được xác định ở những nơi khác như: Admin_menu = có h.new Admin_menu [ "giấy tờ"] = "/ giấy tờ" Admin_menu [ "Tracks"] = "/ track" Admin_menu [ "Attendance"] = "/ tham dự"

Khi tôi bấm vào dấu sót, chẳng có gì xảy ra. Tôi đã kiểm tra mã HTML và các lựa chọn trình đơn thả xuống ở đó.

Bất kỳ ý tưởng nào?

+0

Có bất kỳ lỗi Javascript nào xuất hiện khi bạn nhấp vào trình đơn thả xuống (hoặc trước đó, chẳng hạn như khi trang tải) không? Ngoài ra, có lý do nào bạn bao gồm 'application.js' của mình ba lần không? Bạn đã tham chiếu trong tất cả các cuộc gọi 'javascript_include_tag' của mình - bạn chỉ cần một lần. Tôi khá chắc chắn rằng sẽ không gây ra vấn đề này mặc dù, nhưng nó sẽ không làm tổn thương để sửa chữa. – BaronVonBraun

+0

Vâng, bạn nói đúng. Tôi đã xóa sạch application.js. Tôi không thấy bất kỳ lỗi javascript nào. Dấu mũ thay đổi từ xám sang đen khi tôi di chuột qua nó, nhưng không có gì xảy ra. Khi tôi di chuột qua menu quản trị, bộ chọn cũng không thay đổi thành bàn tay. – EastsideDeveloper

+0

Hãy thử thêm 'href =" # "' vào chính liên kết thả xuống (liên kết với lớp 'thả xuống-toggle'). – BaronVonBraun

Trả lời

13

Bạn cần thay đổi những dòng này:

<%= javascript_include_tag "application" %> 
<%= javascript_include_tag "https://js.stripe.com/v1/", "application" %> 
<%= javascript_include_tag "http://twitter.github.com/bootstrap/assets/js/bootstrap-dropdown.js", "application" %> 

này:

<%= javascript_include_tag "https://js.stripe.com/v1/" %> 
<%= javascript_include_tag "application" %> 

hiện tại của bạn mã bao gồm application.js nhiều lần, đó là một vấn đề đối với mã thả xuống của Bootstrap. Tôi sẽ đặt cược nếu bạn xem tệp application.js của mình, bạn sẽ thấy điều này ở gần đầu:

//= require bootstrap 

Điều đó có nghĩa là bạn đang tải bootstrap mỗi khi bạn bao gồm application.js, sau đó lại github.

Nếu bạn đọc mã JS thả xuống của Bootstrap, bạn sẽ thấy nó thêm trình nghe nhấp chuột vào bật tắt menu thả xuống. Nếu bạn chạy mã này hai lần, bạn sẽ thêm hai trình nghe nhấp chuột. Vì vậy, trên mỗi nhấp chuột, hai người nghe mở menu và đột nhiên đóng lại.

Tôi gặp sự cố tương tự với sự cố của bạn, nơi tôi không nhận thấy rằng số javascript_include_tag cho Stripe của mình cũng đã được bao gồm lại application. Tôi đoán chúng tôi có thể sao chép/dán từ cùng một nơi!

+0

Cảm ơn bạn. Điều này đã làm việc! – EastsideDeveloper

+1

Nó đã bao gồm javascript hai lần cho tôi. Sau nhiều đầu gãi, tôi cũng tìm thấy javascript_include_tag ở cuối bố cục ứng dụng. –

+0

Bất kỳ cơ hội nào bạn đưa vào turbolinks trong ứng dụng của mình? Tôi đã xóa nó khỏi application.js và nó giải quyết vấn đề cho tôi. –

0

Sử dụng tiện ích Firebug hoặc chrome để kiểm tra html trong trình duyệt. Nếu nó không được sửa hãy thử sử dụng các helper để tránh rối tung với chuỗi:

<li><%= link_to menu_text, menu_action %></li>

+0

Trong câu hỏi của tôi, tôi đã đề cập rằng HTML là tốt và các lựa chọn trình đơn thả xuống ở đó. – EastsideDeveloper

Các vấn đề liên quan