I can't seem to access any of the elements from my bootbox. I've tried renaming all the fields, but it won't validate and it won't give me a value:
My BootBox code including some debugging attempts:
$(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");
}
});
//});
})
My Form:
<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="[email protected]">
</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>
I've been staring at this screen so long I feel like my eyes are going to pop out. Thanks in advance!
**** EDIT **** To solve, I moved my form code directly to JS so that it wouldn't be duplicated. Thank you all for the help!:
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="[email protected]">
</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");
}
}
}
}

The reason you keep getting null input values is that you using bootbox and your input element is created inside of bootbox so you have to define your input element in jquery like this
here is a working demo hope it will help you to clear bootbox input element null issue.