为啥 jQuery click 事件在我的多步骤表单中不能多次工作?

Posted

技术标签:

【中文标题】为啥 jQuery click 事件在我的多步骤表单中不能多次工作?【英文标题】:why the jQuery click event does not work multiple times in my multi-step form?为什么 jQuery click 事件在我的多步骤表单中不能多次工作? 【发布时间】:2020-04-01 07:18:45 【问题描述】:

我使用 laravel Blade 和 jquery,我想用几个步骤制作一个表单, 除了下一个按钮,一切正常,当我在第一个字段集中使用它时没关系,但在第二个字段集中它不再起作用我的意思是当我第二次点击时没有任何反应,有人可以检查我的代码或给出提示?

@section('content')
    <div class="page-content get-a-quote get-a-quote-2">
        <div class="container-fluid">

            <div class="row p-5 bg-whitesmoke">
            !! Form::open(['route' => '','class'=> 'col-12']) !!
            <!-- start -->
                <!-- step-1 -->
                <fieldset>
                    <h3 class="text-capitalize">profil</h3>
                    <div class="bg-white p-5">
                        <!-- full name -->
                        <div class="form-group row ">
                            <label for="inputEmail3" class="col-sm-4 col-form-label">Nom et prénom</label>
                            <div class="col-sm-8">
                                 Form::text('nom_et_prenoms', null, ['class' => 'form-control']) 
                            </div>
                        </div>

                        <!-- next boutton  -->
                        <div class="form-group row">
                            <div class="col-sm-10">
                                <button   type="button" class="btn btn-primary" id="next_btn">Suivant</button>
                            </div>
                        </div>
                    </div>
                </fieldset>
                <!-- step-2 -->
                <fieldset>
                    <h3 class="text-capitalize">Coordonnées</h3>
                    <div class="bg-white p-5">

                        <div class="form-group row ">
                            <label for="inputEmail3" class="col-sm-4 col-form-label">email
                            </label>
                            <div class="col-sm-8">
                                 Form::email('email', null, ['class' => 'form-control', 'required']) 
                            </div>
                        </div>


                        <div class="form-group row">
                            <div class="col-sm-10">
                                <button  type="button" class="btn btn-primary" id="prev_btn">Précédent</button>
                                <button  type="button" class="btn btn-primary" id="next_btn">Suivant</button>
                            </div>
                        </div>
                    </div>
                </fieldset>

                <!-- step-2 -->
                <fieldset>
                    <h3 class="text-capitalize">assurance</h3>
                    <div class="bg-white p-5">

                        <div class="form-group row ">
                            <label for="inputEmail3" class="col-sm-4 col-form-label">Date de début
                            </label>
                            <div class="col-sm-8">
                                 Form::date('date_de_debut', \Carbon\Carbon::now(), ['class' => 'au-form-control au-form-radius', 'required', 'placeholder'=> 'jj-mm-aaaa']) 
                            </div>
                        </div>

                        <div class="form-group row">
                            <div class="col-sm-10">
                                <button type="button" class="btn btn-primary" id="prev_btn">
                                    précédent
                                </button>
                                <button type="submit" class="btn btn-primary" id="submit_btn">
                                    Lancer le simulateur
                                </button>
                            </div>
                        </div>
                    </div>
                </fieldset>
                <!-- end -->
                !! Form::close() !!
            </div>
        </div>
    </div>
@endsection

我的 javascript(jquery):

$(document).ready(function()

    var current_fs, next_fs, previous_fs; //fieldsets

    $("#next_btn").click(function() 
        current_fs = $(this).parents('fieldset');
        next_fs = $(this).parents('fieldset').next();
        //show the next fieldset
        next_fs.show();
        // hide the current fieldset
        current_fs.hide();
    );

    $("#prev_btn").click(function() 
        current_fs = $(this).parents('fieldset');
        previous_fs = $(this).parents('fieldset').prev();
        //show the previous fieldset
        previous_fs.show();
        //hide the current fieldset with style
        current_fs.hide();
    );

);

【问题讨论】:

【参考方案1】:

(这里不是 laravel 用户)

您应该避免使用多个 ID,例如 #next_btn

尝试改用 .next-btn 类,它可能会修复 onclick 以在单击第二个字段集中的下一个 btn 时检索 step3 字段集。

注意:另外,将第 n 次使用 $(this).parents('fieldset') 替换为您创建的变量 current_fs

【讨论】:

以上是关于为啥 jQuery click 事件在我的多步骤表单中不能多次工作?的主要内容,如果未能解决你的问题,请参考以下文章

jquery on()绑定的点击事件在js动态新添加的元素上无效,请问为啥

jquery为啥触发多次click事件

为啥我的 PostBack 在我的 jQuery 点击事件之前发生?

为啥jquery在我的html中不能用?

为啥 button.click() 在我的脚本中不起作用?

bootstrap中为啥button的click事件无法触发?