javascript - 检查 2 个输入和启用按钮的变化
问题描述
我有一个包含一系列无线电项目的表格。如果用户在其中一个单选项目(缺少项目)上选择特定条目,我使用 JQuery 将引导程序 is-invalid 类添加到表单上的两个特定输入以及一个标签,要求他们添加详细信息并禁用提交按钮阻止他们提交表单。
$(function () {
$("input[name=optradio]:radio").click(function () {
if ($('input[name=optradio]:checked').val() == "2") {
$('textarea[name=sentTo]').addClass('is-invalid');
$('input[name=dateSent]').addClass('is-invalid');
$('#removedMSG').text("You must update this field prior to saving");
$('#removedMSG2').text("You must update this field prior to saving");
$('#submit').prop('disabled', true);
} else {
$('textarea[name=sentTo]').removeClass('is-invalid');
$('input[name=dateSent]').removeClass('is-invalid');
$('#submit').prop('disabled', false);
}
});
});
我想添加进一步的检查以确保用户在重新启用提交按钮之前更新了两个输入(一个文本区域)。
我知道我可以使用以下内容检查输入更改
$("textarea[name=sentTo]").on("input", function(){
$('textarea[name=sentTo]').removeClass('is-invalid');
});
这工作正常。但是我不知道如何将它们整合在一起:
所以基本上用户选择了收音机,is-invalid 被添加到 2 个输入字段并且提交按钮被禁用 - 用户根据需要完成 2 个字段,只有当两个字段都更新后,我们才会重新启用提交按钮。
我在想我需要一个 if 语句,但我似乎无法正确编写代码。
我试过了
if `$("textarea[name=sentTo]").on("input") && $("textarea[name=dateSent]").on("input")`
但这不起作用
感谢妈妈,我正在使用下面的代码。
$(function () {
$('input[name=optradio]:radio').click(function () {
if ($('input[name=optradio]:checked').val() == "2") {
$('textarea[name=sentTo]').addClass('is-invalid');
$('input[name=dateSent]').addClass('is-invalid');
$('#removedMSG').text("You must update this field prior to saving");
$('#removedMSG2').text("You must update this field prior to saving");
$('#submit').prop('disabled', true);
$('#submit').addClass('btn-danger');
$('#submit').removeClass('btn-primary');
} else {
$('textarea[name=sentTo]').removeClass('is-invalid');
$('input[name=dateSent]').removeClass('is-invalid');
$('#submit').prop('disabled', false);
$('#submit').addClass('btn-primary');
$('#submit').removeClass('btn-danger');
}
});
});
var sentTo = false;
var dateSent = false;
$("textarea[name=sentTo], input[name=dateSent]").on("input", function(){
if($(this).attr('name') == 'sentTo') {
sentTo = true;
$(this).removeClass('is-invalid');
}
if($(this).attr('name') == 'dateSent') {
dateSent = true;
$(this).removeClass('is-invalid');
}
if(sentTo && dateSent){
$('#submit').prop('disabled', false);
$('#submit').addClass('btn-primary');
$('#submit').removeClass('btn-danger');
}
});
解决方案
您可以传递多个以逗号分隔的选择器,并使用this
关键字来引用事件处理函数中的当前元素:
var sentTo = dateSent = false;
$("textarea[name=sentTo], textarea[name=dateSent]").on("input", function(){
if($(this).attr('name') == 'sentTo') sentTo = true; //true for sentTo
if($(this).attr('name') == 'dateSent') dateSent = true;//true for dateSent
if(sentTo && dateSent){ // if both are true
$(this).removeClass('is-invalid');
sentTo = dateSent = false;
}
});
推荐阅读
- html - 如何在图像上叠加渐变
- java - 如何在后台运行代码或完整应用程序
- netlogo - Netlogo,在长度为 x 的列表中迭代 n 个项目(其中 n <= x)
- typescript - Typescript 中的类型定义中的方括号是什么意思?
- matlab - 为什么我不能在这里使用'scatter3'?
- javascript - 从用户输入自动创建 Javascript 表单
- scala - 如果 decltpe 为空,如何使用 scalameta 获取变量的类型?
- python - 如何使用目录路径作为 HDF5 组的名称?
- vbscript - 如何在 If/Else 语句中打开 ie.exe
- node.js - Mongoose - 多个数据库连接