【问题标题】:jQUery preventDefault or stopPropagation() not working with toggle formjQUery preventDefault 或 stopPropagation() 不适用于切换表单
【发布时间】:2019-01-24 16:32:20
【问题描述】:

我正在制作登录表单下拉菜单。当用户单击登录项时,将打开下拉表单。问题是一旦单击表单或其元素,它就会关闭。

我尝试了下面的代码,但没有工作

if ($('.auth').length) {
    $('.auth').click(function (event) {
        $(this).toggleClass('auth-active');
        $('.el-auth-box').toggle();
        //event.stopPropagation(); // not working
        event.preventDefault(); // not working
        //event.stopImmediatePropagation(); // not working
    });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="auth auth-active">
    <li class="auth-power">
        <i class="material-icons">power_settings_new</i>
        <ul class="el-auth-box" style="display: block;">
            <li class="el-auth-box-items">
                <form action="#" method="post">
                    <input dir="auto" name="emailhandle" placeholder="Email or Username" type="text">
                        <input dir="auto" name="password" placeholder="Password" type="password">
                            <div class="checkbox">
                                <input id="el-rememberme" name="remember" type="checkbox" value="1">
                                    <label for="el-rememberme">Remember</label>
                                </input>
                            </div>
                            <input name="csfr_code" type="hidden" value="0-1548314066-7814ce8b50bba9749389fdf8e76639a317c55c14">
                                <input class="el-form-tall-button el-form-tall-button-login" name="dologin" type="submit" value="Login"></input>
                            </input>
                        </input>
                    </input>
                </form>                
            </li>
        </ul>
        <!-- el-auth-box -->
    </li>
    <!-- el-auth-box-items -->
</ul>

【问题讨论】:

  • 你用过return false; ?

标签: javascript jquery


【解决方案1】:

您可以为 i 元素设置事件点击。 试试看:

if ($('.auth').length) {
    $('.auth i').click(function (event) {
        $(this).toggleClass('auth-active');
        $('.el-auth-box').toggle();
        //event.stopPropagation(); // not working
        event.preventDefault(); // not working
        //event.stopImmediatePropagation(); // not working
    });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="auth auth-active">
    <li class="auth-power">
        <i class="material-icons">power_settings_new</i>
        <ul class="el-auth-box" style="display: block;">
            <li class="el-auth-box-items">
                <form action="#" method="post">
                    <input dir="auto" name="emailhandle" placeholder="Email or Username" type="text">
                        <input dir="auto" name="password" placeholder="Password" type="password">
                            <div class="checkbox">
                                <input id="el-rememberme" name="remember" type="checkbox" value="1">
                                    <label for="el-rememberme">Remember</label>
                                </input>
                            </div>
                            <input name="csfr_code" type="hidden" value="0-1548314066-7814ce8b50bba9749389fdf8e76639a317c55c14">
                                <input class="el-form-tall-button el-form-tall-button-login" name="dologin" type="submit" value="Login"></input>
                            </input>
                        </input>
                    </input>
                </form>                
            </li>
        </ul>
        <!-- el-auth-box -->
    </li>
    <!-- el-auth-box-items -->
</ul>

【讨论】:

  • 因为如果您在单击&lt;ul class="auth auth-active"&gt;&lt;/ul&gt; 中的所有元素时为 $('.auth') 设置事件单击然后事件运行,则一旦单击表单或其元素,它就会关闭。如果在单击 i 元素时为 i 元素设置事件,则事件运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
相关资源
最近更新 更多