为什么我的 Javascript toggleClass 代码不起作用?

Why is my Javascript toggleClass code not working?

我试图在单击时将 .open class 添加到 div。它目前无法正常工作,我不确定为什么。

这是我的 JS

(function ($) {
    // sticky footer form class toggle on click
    $(".nb-form .form-header").on("click", function () {
        $(".nb-form").toggleClass("open");
    });

这是我的HTML

<div class="nb-form">
    <div class="form-header">
        <p class="title">Request a Quote</p>
        <img src="https://soldaf.ca/wp-content/uploads/2020/11/Andrew-headshot-e1606168346405.jpg" alt="Andrew Foster" class="user-icon">
    </div>    

    <div class="form-content">
        <p class="message">Send us a message or give us a call at <span class="d-inline-block">(403) 915-6195.</span></p>   
        <?php echo do_shortcode( '[[contact-form-7 id="4545" title="Contact form 1"]]' ); ?>
    </div>
  </div>

作为参考,我正在尝试准确复制本网站右下角“有问题”小部件的情况 https://soldaf.ca/

谢谢,

问题似乎是因为您用于包含 jQuery 代码的语法是立即调用的函数表达式 (IIFE),而不是 jQuery document.ready 处理程序。这意味着您的代码在 DOM 加载之前是 运行,因此您尝试绑定事件处理程序的元素尚不存在。

要解决此问题,请使用标准 jQuery document.ready 事件处理程序:

jQuery($ => {
  // sticky footer form class toggle on click
  $(".nb-form .form-header").on("click", () => {
    $(".nb-form").toggleClass("open");
  });
});
/* Note this CSS is only for demo purposes and isn't relevant to the issue */
img { width: 50px; }
.nb-form .form-content { display: none; }
.nb-form.open .form-content { display: block; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="nb-form">
  <div class="form-header">
    <p class="title">Request a Quote</p>
    <img src="https://soldaf.ca/wp-content/uploads/2020/11/Andrew-headshot-e1606168346405.jpg" alt="Andrew Foster" class="user-icon" />
  </div>

  <div class="form-content">
    <p class="message">Send us a message or give us a call at <span class="d-inline-block">(403) 915-6195.</span></p>
    <?php echo do_shortcode( '[[contact-form-7 id="4545" title="Contact form 1"]]' ); ?>
  </div>
</div>

尝试使用此代码

<div class="nb-form">
    <div class="form-header">
        <p class="title">Request a Quote</p>
        <img src="https://soldaf.ca/wp-content/uploads/2020/11/Andrew-headshot-e1606168346405.jpg" alt="Andrew Foster" class="user-icon">
    </div>    

    <div class="form-content">
        <p class="message">Send us a message or give us a call at <span class="d-inline-block">(403) 915-6195.</span></p>   
        <?php echo do_shortcode( '[[contact-form-7 id="4545" title="Contact form 1"]]' ); ?>
    </div>
</div>

Jquery

$(".nb-form .form-header").on("click", function () {
    $(".nb-form .form-content").toggleClass("open");
    // or else you can use toggle method
    $(".nb-form .form-content").toggle()
});