【发布时间】:2022-02-12 07:26:11
【问题描述】:
我有以下 javascript 代码,用于验证具有某些模式的电子邮件和一个带有我同意 T&C 标签的复选框。如果其中任何一个失败,那么我禁用提交按钮。一切正常,但我使用了太多函数,这会导致一些冲突,如果一个条件成立,则可以单击提交按钮。
我无法同时验证这两个条件,因为它们属于不同的类型。堆栈溢出有一些答案,但它们属于相同类型的字段,例如 2 个输入、3 个复选框,但不是不同的字段。
代码如下:
window.onload = function ninjaInit() {
validatEmail();
validatCheckbox();
jQuery('#nf-field-20').keyup(validatEmail);
jQuery('#nf-field-13').change(validatCheckbox);
}
function validatEmail() {
var email = document.getElementById('nf-field-20');
//console.log(email.value);
if (
/^[a-zA-Z0-9._%+-]+@(?!gmail.com)(?!yahoo.com)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!live.com)(?!outlook.com)[a-zA-Z0-9_-]+.[a-zA-Z0-9-.]{2,61}$/.test(email.value)) {
itWorksem();
} else {
notWorkingem();
}
}
function validatCheckbox() {
if(!jQuery('#nf-field-13').hasClass("nf-checked")){
console.log('checkbox not checked');
checkBoGood();
}else{
console.log('checkbox checked');
checkBoBad();
}
}
function itWorksem() {
var errMessage = document.getElementById("nf-error-20");
//jQuery("#nf-field-20-wrap").removeClass("nf-error");
jQuery("#nf-field-15").removeClass("btn-disable");
jQuery("#nf-field-20").removeClass("input-error");
errMessage.textContent = "";
}
function notWorkingem() {
var errMessage = document.getElementById("nf-error-20");
//jQuery("#nf-field-20-wrap").addClass("nf-error");
jQuery("#nf-field-15").addClass("btn-disable");
jQuery("#nf-field-20").addClass("input-error");
errMessage.textContent = "You need to provide a business address.";
}
function checkBoGood(){
var errMsgPp = document.getElementById("nf-error-13");
jQuery("#nf-field-15").removeClass("btn-disable");
// errMsgPp.textContent = "";
}
function checkBoBad(){
var errMsgPp = document.getElementById("nf-error-13");
jQuery("#nf-field-15").addClass("btn-disable");
}
这里需要考虑一些事情:
- 我无法使用标准函数检查复选框状态,因为该复选框还使用一个类来检查是否通过添加“nf-checked”类来检查它是否被选中,这就是为什么我必须检查该元素是否具有该类是否命名为“nf-checked”。仅供参考这个忍者形式。
- 我无法使用 Document.ready 和 $,因为这在 WordPress 中不起作用。
- 所有这些代码都是我自己完成的,所以如果我犯了一些愚蠢的错误,请纠正我。我是 Javascript 的初学者。
- 如果 Html 有帮助,那么我也在下面添加。我没有添加整个代码,因为我可以使用 ID 定位元素。
<!--Email container Start-->
<div id="nf-field-20-container" class="nf-field-container textbox-container label-hidden ">
<div class="nf-before-field">
</div>
<div class="nf-field">
<div id="nf-field-20-wrap" class="field-wrap textbox-wrap" data-field-id="20">
<div class="nf-field-label"><label for="nf-field-20" id="nf-label-field-20" class="">Work email address </label>
</div>
<div class="nf-field-element">
<input type="text" value="" class="ninja-forms-field nf-element input-error" placeholder="Work email address" id="nf-field-20" name="nf-field-20" aria-invalid="false" aria-describedby="nf-error-20" aria-labelledby="nf-label-field-20">
</div>
</div>
</div>
<div class="nf-after-field">
<nf-section>
<div class="nf-input-limit">
</div>
<div id="nf-error-20" class="nf-error-wrap nf-error" role="alert">You need to provide a business address.</div>
</nf-section>
</div>
</div>
<!--Email container Ends-->
<!--Checkbox Start-->
<div id="nf-field-13-container" class="nf-field-container checkbox-container label-right one-half first ">
<div class="nf-before-field">
</div>
<div class="nf-field"><div id="nf-field-13-wrap" class="field-wrap checkbox-wrap" data-field-id="13">
<div class="nf-field-label"><label for="nf-field-13" id="nf-label-field-13" class=" nf-checked-label">I accept hubsell’s <a href="#">privacy policy</a>. </label>
</div>
<div class="nf-field-element">
<input id="nf-field-13" name="nf-field-13" aria-describedby="nf-error-13" class="ninja-forms-field nf-checked nf-element" type="checkbox" value="1" checked="" aria-labelledby="nf-label-field-13">
</div>
</div>
</div>
<div class="nf-after-field"><nf-section>
<div class="nf-input-limit"></div>
<div id="nf-error-13" class="nf-error-wrap nf-error" role="alert"></div>
</nf-section>
</div>
</div>
<!--Checkbox Ends-->
<!--Submit Start-->
<input id="nf-field-15" class="ninja-forms-field nf-element" type="button" value="Submit">
<!--Submit Ends-->
window.onload = function ninjaInit() {
validatEmail();
validatCheckbox();
jQuery('#nf-field-20').keyup(validatEmail);
jQuery('#nf-field-13').change(validatCheckbox);
}
function validatEmail() {
var email = document.getElementById('nf-field-20');
//console.log(email.value);
if (
/^[a-zA-Z0-9._%+-]+@(?!gmail.com)(?!yahoo.com)(?!hotmail.com)(?!yahoo.co.in)(?!aol.com)(?!live.com)(?!outlook.com)[a-zA-Z0-9_-]+.[a-zA-Z0-9-.]{2,61}$/.test(email.value)) {
itWorksem();
} else {
notWorkingem();
}
}
function validatCheckbox() {
if (!jQuery('#nf-field-13').hasClass("nf-checked")) {
console.log('checkbox not checked');
checkBoGood();
} else {
console.log('checkbox checked');
checkBoBad();
}
}
function itWorksem() {
var errMessage = document.getElementById("nf-error-20");
//jQuery("#nf-field-20-wrap").removeClass("nf-error");
jQuery("#nf-field-15").removeClass("btn-disable");
jQuery("#nf-field-20").removeClass("input-error");
errMessage.textContent = "";
}
function notWorkingem() {
var errMessage = document.getElementById("nf-error-20");
//jQuery("#nf-field-20-wrap").addClass("nf-error");
jQuery("#nf-field-15").addClass("btn-disable");
jQuery("#nf-field-20").addClass("input-error");
errMessage.textContent = "You need to provide a business address.";
}
function checkBoGood() {
var errMsgPp = document.getElementById("nf-error-13");
jQuery("#nf-field-15").removeClass("btn-disable");
// errMsgPp.textContent = "";
}
function checkBoBad() {
var errMsgPp = document.getElementById("nf-error-13");
jQuery("#nf-field-15").addClass("btn-disable");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!--Email container Start-->
<div id="nf-field-20-container" class="nf-field-container textbox-container label-hidden ">
<div class="nf-before-field">
</div>
<div class="nf-field">
<div id="nf-field-20-wrap" class="field-wrap textbox-wrap" data-field-id="20">
<div class="nf-field-label"><label for="nf-field-20" id="nf-label-field-20" class="">Work email address </label>
</div>
<div class="nf-field-element">
<input type="text" value="" class="ninja-forms-field nf-element input-error" placeholder="Work email address" id="nf-field-20" name="nf-field-20" aria-invalid="false" aria-describedby="nf-error-20" aria-labelledby="nf-label-field-20">
</div>
</div>
</div>
<div class="nf-after-field">
<nf-section>
<div class="nf-input-limit">
</div>
<div id="nf-error-20" class="nf-error-wrap nf-error" role="alert">You need to provide a business address.</div>
</nf-section>
</div>
</div>
<!--Email container Ends-->
<!--Checkbox Start-->
<div id="nf-field-13-container" class="nf-field-container checkbox-container label-right one-half first ">
<div class="nf-before-field">
</div>
<div class="nf-field">
<div id="nf-field-13-wrap" class="field-wrap checkbox-wrap" data-field-id="13">
<div class="nf-field-label"><label for="nf-field-13" id="nf-label-field-13" class=" nf-checked-label">I accept hubsell’s <a href="#">privacy policy</a>. </label>
</div>
<div class="nf-field-element">
<input id="nf-field-13" name="nf-field-13" aria-describedby="nf-error-13" class="ninja-forms-field nf-checked nf-element" type="checkbox" value="1" checked="" aria-labelledby="nf-label-field-13">
</div>
</div>
</div>
<div class="nf-after-field">
<nf-section>
<div class="nf-input-limit"></div>
<div id="nf-error-13" class="nf-error-wrap nf-error" role="alert"></div>
</nf-section>
</div>
</div>
<!--Checkbox Ends-->
<!--Submit Start-->
<input id="nf-field-15" class="ninja-forms-field nf-element" type="button" value="Submit">
<!--Submit Ends-->
你可以看到 input[type="checkbox"] 已经有那个 nf-checked 类我在忍者表单中将默认值标记为选中。
更新:我在 ruleboy21 评论之后添加了正确的 HTML 代码。
【问题讨论】:
-
在输入字段上运行一个事件监听器,并检查每个字符是否匹配应该大大减少这种情况。
-
请更新您的 HTML。例如。为
nf-error-20等错误元素添加标记。 -
@BGPHiJACK 谢谢。正如我提到的,我是这方面的初学者。我会想办法试试,然后告诉你。
-
@ruleboy21 我已经用正确的 HTML 更新了我的问题。
标签: javascript html jquery css ninja-forms