JavaScript不能在Rails/JQuery中使用

bhmjp9jg  于 2023-10-17  发布在  jQuery
关注(0)|答案(3)|浏览(143)

我试图弄清楚为什么JavaScript无法从模态中找到.submit-button。我的JavaScript在application.js中,但我不知道我做错了什么。我是否应该将我的jQuery代码 Package 在其他东西中?

  1. **application.js**// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
  2. import "@hotwired/turbo-rails"
  3. import "controllers"
  4. import "popper"
  5. import "bootstrap"
  6. $(document).on("click", ".submit-button", function () {
  7. alert("click");
  8. });
  1. <!-- Modal -->
  2. <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  3. <div class="modal-dialog modal-dialog-centered">
  4. <div class="modal-content">
  5. <div class="modal-header">
  6. <h5 class="modal-title" id="exampleModalLabel">Welcome! Please Log in</h5>
  7. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  8. </div>
  9. <div class="modal-body">
  10. <%= simple_form_for(resource, remote: true, as: resource_name, url: registration_path(resource_name)) do |f| %>
  11. <%= f.error_notification %>
  12. <div class="form-inputs">
  13. <%= f.input :email,
  14. required: true,
  15. autofocus: true,
  16. input_html: { autocomplete: "email" }%>
  17. <%= f.input :password,
  18. required: true,
  19. hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
  20. input_html: { autocomplete: "new-password" } %>
  21. <%= f.input :password_confirmation,
  22. required: true,
  23. input_html: { autocomplete: "new-password" } %>
  24. </div>
  25. <div class="form-actions">
  26. <%= f.button :submit, "Sign up Now", class: 'btn btn-primary submit-button' %>
  27. </div>
  28. <% end %>
  29. <%= render "devise/shared/links" %>
  30. </div>
  31. <div class="modal-footer">
  32. <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
  33. <button type="button" class="btn btn-primary">Log In</button>
  34. <%= button_to(
  35. "Log Out",
  36. destroy_user_session_path,
  37. method: :delete
  38. ) %>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
mgdq6dx1

mgdq6dx11#

由于在application.js的顶部有关于importmaps的注解,因此使用this library
你可以这样固定jQuery(我从你的答案中获取URL,你可以使用from jsDelivr或其他来源)

  1. # config/importmap.rb
  2. # ... your existing pins
  3. pin "jquery", to: "https://code.jquery.com/jquery-3.5.1.min.js"

和进口

  1. // app/javascript/application.js
  2. import "@hotwired/turbo-rails"
  3. import "controllers"
  4. import "jquery"
  5. import "popper"
  6. import "bootstrap"
  7. $(document).on("click", ".submit-button", function () {
  8. alert("click");
  9. });
展开查看全部
35g0bw71

35g0bw712#

在获取error Uncaught ReferenceError: $ is not defined时,我在head标签之间添加了<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>。我在gem文件中有gem 'jquery-rails',但不知道rails为什么这样做,但问题解决了。

mm5n2pyu

mm5n2pyu3#

在2023年,你真的需要jQuery吗?

  1. document.addEventListener("click", (event)=>{
  2. if (!event.target.matches(".submit-button")) return;
  3. alert("click!");
  4. });

今天的浏览器API是如此的好,以至于没有它也一样容易。
如果你要做更复杂的事情,你可以使用Stimulus

相关问题