【问题标题】:Why is my BootBox seemingly inaccessable?为什么我的 BootBox 似乎无法访问?
【发布时间】:2021-12-21 00:43:55
【问题描述】:

我似乎无法访问我的引导箱中的任何元素。我已经尝试重命名所有字段,但它不会验证并且不会给我一个值:

我的 BootBox 代码,包括一些调试尝试:

$(document).on("click", "#btnNew", function () {
    //$("#btnNew").click(function () {
        var form = $("#newSubjectCard").html();
        bootbox.dialog({
            message: form,
            title: "Add New Subject",
            buttons: {
                close: {
                    label: 'Cancel',
                    className: "btn btn-sm btn-danger",
                    callback: function () { }
                },
                success: {
                    label: "Add Subject",
                    className: "btn btn-sm btn-primary",
                    callback: function () {
                        if ($("#newSubjectName").val() == "" || $("#newSubjectEmail").val() == "") {
                            console.log($("#newSubjectName").val());
                            console.log($("#newSubjectEmail").val());
                            console.log("Fail");
                            
                            return false;  // keeps dialog open
                        } else {
                            //addCustomer();
                            console.log($("#newSubjectName").val());
                            console.log($("#newSubjectEmail").val());
                            //console.log("tried to submit");
                        }
                    }
                }
            }
        });

        $("#addCustomer").validate({
            // Specify validation rules
            rules: {
                newSubjectName: "required",
                newSubjectEmail: {
                    required: true,
                    email: true
                }
            },
            messages: {
                newSubjectName: "Please enter a name",
                newSubjectEmail: "Please enter a valid email address"
            },
            submitHandler: function (form) {
                console.log("submitted");
            }
        });
    //});
})

我的表格

<div id="newSubjectCard" class="d-none">
    <form id="addCustomer">
        <div class="form-row">
            <div class="col-auto">
                Name:
                <input type="text" id="newSubjectName" name="newSubjectName" class="form-control" placeholder="JANE DOE">
            </div>
        </div>
        <div class="form-row">
            <div class="col-auto">
                Email:
                <input type="text" id="newSubjectEmail" name="newSubjectEmail" class="form-control" placeholder="JANE.DOE@GMAIL.COM">
            </div>
        </div>
        <div class="form-row">
            <div class="col-auto">
                Group:
                <input type="text" id="newSubjectGroup" name="newSubjectGroup" class="form-control" placeholder="MR. JOHNS CLASS">
            </div>
        </div>
    </form>
</div>

我一直盯着这个屏幕很久了,我觉得我的眼睛要跳出来了。提前致谢!

**** 编辑 **** 为了解决这个问题,我将表单代码直接移到了 JS 中,这样就不会重复了。谢谢大家的帮助!:

var form = `<div id="newSubjectCard">
                            <form id="addCustomer">
                                <div class="form-row">
                                    <div class="col-auto">
                                        Name:
                                        <input type="text" id="newSubjectName" name="newSubjectName" class="form-control" placeholder="JANE DOE">
                                    </div>
                                </div>
                                <div class="form-row">
                                    <div class="col-auto">
                                        Email:
                                        <input type="text" id="newSubjectEmail" name="newSubjectEmail" class="form-control" placeholder="JANE.DOE@GMAIL.COM">
                                    </div>
                                </div>
                                <div class="form-row">
                                    <div class="col-auto">
                                        Group:
                                        <input type="text" id="newSubjectGroup" name="newSubjectGroup" class="form-control" placeholder="MR. JOHNS CLASS">
                                    </div>
                                </div>
                            </form>
                        </div>`;
            bootbox.dialog({
                message: form,
                title: "Add New Subject",
                buttons: {
                    close: {
                        label: 'Cancel',
                        className: "btn btn-sm btn-danger",
                        callback: function () { }
                    },
                    success: {
                        label: "Add Subject",
                        className: "btn btn-sm btn-primary",
                        callback: function () {
                            if ($("#newSubjectName").val() == "" || $("#newSubjectEmail").val() == "") {
                                console.log($("#newSubjectName").val());
                                console.log($("#newSubjectEmail").val());
                                console.log("Fail");
                                $("#addCustomer").valid;

                                return false;  // keeps dialog open

                            } else {
                                //addCustomer();
                                console.log($("#newSubjectName").val());
                                console.log($("#newSubjectEmail").val());
                                //console.log("tried to submit");
                            }
                        }
                    }
                }

【问题讨论】:

  • 我相信,由于您使用引导箱的方式,您有重复的元素。您在 html 中拥有的模板中的那些,然后是您制作的副本中的那些传递到引导箱以显示在对话框中。重复的 ID 会破坏事物,或者值来自模板而不是对话框。
  • @Ouroborus - 你是对的。让我大吃一惊的是,我从我的应用程序的另一部分复制了大部分代码,并且可以在那里找到。我将 HTML 粘贴在 2 个反引号之间,并将其直接分配给表单 var。现在工作。谢谢!
  • .. 啊,我的原始代码有效,因为表单 ID 是动态的。

标签: jquery bootstrap-4 bootbox


【解决方案1】:

你不断得到空输入值的原因是你使用了引导箱并且你的输入元素是在引导箱内创建的,所以你必须像这样在 jquery 中定义你的输入元素

$('<your jquery selector for input>','.bootbox').val()

这是一个工作演示,希望它可以帮助您清除引导框输入元素空问题。

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/5.5.2/bootbox.min.js" integrity="sha512-RdSPYh1WA6BF0RhpisYJVYkOyTzK4HwofJ3Q7ivt/jkpW6Vc8AurL1R+4AUcvn9IwEKAPm/fk7qFZW3OuiUDeg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <script>
$(document).ready(function(){
  $(document).on("click", "#btnNew", function () {
debugger
    //$("#btnNew").click(function () {
        var form = $("#newSubjectCard").html();
        bootbox.dialog({
            message: form,
            title: "Add New Subject",
            buttons: {
                close: {
                    label: 'Cancel',
                    className: "btn btn-sm btn-danger",
                    callback: function () { }
                },
                success: {
                    label: "Add Subject",
                    className: "btn btn-sm btn-primary",
                    callback: function () {
                    debugger
                        if ($("#newSubjectName",".bootbox").val() == "" || $("#newSubjectEmail",".bootbox").val() == "") {
                            console.log($("#newSubjectName",".bootbox").val());
                            console.log($("#newSubjectEmail",".bootbox").val());
                            console.log("Fail");
                            
                            return false;  // keeps dialog open
                        } else {
                            //addCustomer();
                            console.log($("#newSubjectName",".bootbox").val());
                            console.log($("#newSubjectEmail",".bootbox").val());
                            //console.log("tried to submit");
                        }
                    }
                }
            }
        });

  
    //});
})
 
});
  </script>
</head>
<body>
<button class="btn btn-success" id="btnNew">click</button>
<div id="newSubjectCard" class="d-none">
    <form id="addCustomer">
        <div class="form-row">
            <div class="col-auto">
                Name:
                <input type="text" id="newSubjectName" name="newSubjectName" class="form-control" placeholder="JANE DOE">
            </div>
        </div>
        <div class="form-row">
            <div class="col-auto">
                Email:
                <input type="text" id="newSubjectEmail" name="newSubjectEmail" class="form-control" placeholder="JANE.DOE@GMAIL.COM">
            </div>
        </div>
        <div class="form-row">
            <div class="col-auto">
                Group:
                <input type="text" id="newSubjectGroup" name="newSubjectGroup" class="form-control" placeholder="MR. JOHNS CLASS">
            </div>
        </div>
    </form>
</div>

</body>
</html>

【讨论】:

  • 谢谢你。事实证明,衔尾蛇是正确的。根本问题是一切都是重复的。您的解决方案也有效,所以我会接受它作为 asnwer。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多