Javascript 我们可以使用and运算符组合多个jQuery事件吗

Javascript 我们可以使用and运算符组合多个jQuery事件吗,javascript,jquery,Javascript,Jquery,我想使用jQuery查看是否更改了三个文本框,以便通过AJAX发送数据 我尝试了一个简单的脚本: $("#name, #position, #salary").change(function() { console.log("All data are changed"); }); 其中,姓名、职位和薪水是三个文本框的各自ID 结果是,当我更改第一个时: 当我换了第二个: 这是第三个: 因此,当每个文本框分别被更改时,我得到了消息。我需要的是,当三个参数发生变化时,显示消息。我是

我想使用
jQuery
查看是否更改了三个文本框,以便通过
AJAX
发送数据

我尝试了一个简单的脚本:

$("#name, #position, #salary").change(function()
{
     console.log("All data are changed");
});
其中,姓名、职位和薪水是三个文本框的各自ID

结果是,当我更改第一个时:

当我换了第二个:

这是第三个:


因此,当每个文本框分别被更改时,我得到了消息。我需要的是,当三个参数发生变化时,显示消息。我是jQuery新手,所以我想知道我是否可以使用类似于
if。。。而且。。。和jQuery中的

将多个选择器存储在一个变量中。在
.change()
上,循环多选择器中的元素以测试输入值。如果所有输入都有内容,则可以调用附加函数

$(文档).ready(函数(){
变量$selectors=$('#input1,#input2,#input3');
$selectors.change(函数(){
var allChanged=true;
log($(this.attr('id')+'已更改)。);
$selector.each(函数(){
if($(this.val()=''){
allChanged=false;
}
});
如果(全部更改){
//$().ajax();
}
});
});

您可以将更改的输入存储在一个数组中,并检查其长度以检测是否所有输入都已更改

var changedInputs = [];
$("#name, #position, #salary").change(function()
{
     changedInputs.push(this.id);
     if(changedInputs.length === 3) {
       alert('All 3 inputs where changed!');
     }
});

您也可以使用这种方法

尝试使用一个类:

<input class="need">
<input class="need">
<input class="need">
$(".need").change(function()
{
  var all = 0;
    $(".need").each(function(i,v){
        if ($(v).val().length >0 ) {
          all+=1; 
        }
    });
    if(all.length == 3) {
       alert('All 3 inputs where changed!');
     }
});

$(“.need”).change(函数()
{
var-all=0;
$(“.need”)。每个(功能(i、v){
如果($(v).val().length>0){
全部+=1;
}
});
如果(all.length==3){
警报(“所有3个输入都已更改!”);
}
});
您可以尝试:

var changedInputs = [];
$("#name, #position, #salary").change(function()
{
   if !(changedInputs.include(this.id) ){
     changedInputs.push(this.id);
     if(changedInputs.length == 3) {
        alert('All 3 inputs where changed!');
   }
});
一种可能的解决办法:

var needed = ["name", "position", "salary"];

$("#name, #position, #salary").change(function()
{
    if(needed.length == 0) return;
    needed.splice(needed.indexOf($(this).attr('id')), 1);
    if(needed.length == 0)
        console.log("All data are changed");
});
首先,需要将数组“needed”初始化为所有必填字段 然后,当一个字段被更改时,您将从所需的数组中删除该字段 数组为空后,所有必需的值都将更改;)


第一个条件是确保不会多次记录消息

很多验证框架都有一个概念,即一旦用户更改了值,就会出现脏输入。您可以实现此功能,并在所有字段都变脏时进行检查

$(“#姓名、职位、薪水”)。更改(函数(){
这个.classList.add(“dirty”);
如果($(“.dirty”).length==3){
console.log(“所有数据都已更改”);
}
});

您可以将当前输入值与默认值进行比较,然后逻辑可以如下所示:

顺便说一句,我为所有输入设置了一个公共类进行检查,因为这是如何在imho中完成的

$('.inputToCheck')。在('change',function()上{
var allInputsChanged=!$('.inputocheck').filter(函数(){
返回this.value==this.defaultValue;
}).长度;
如果(allInputsChanged)警报(“所有输入已更改!”);
});


一个人如何同时更新3个文本框?哈哈,好吧,这样看,当
一个人在第一个框中键入,然后在第二个框中键入,然后在第三个框中键入,并且不单击按钮,这些数据将发送到服务器。足够好了?所以基本上你想检查当其中一个改变时这三个是否为空?我们不需要在没有的地方看到复杂的东西。是的,我知道,我们的想法是在没有提交按钮的情况下发送变更数据。我知道我对自己和你都很苛刻,但我认为测试它是值得的,但我只是在尝试一些jQuery事件,以及如何在同一个函数中组合多个事件。这一个的问题是,如果此人更改相同的id 2次,那么它会起作用吗?op中没有提到,但您可以添加一些逻辑,根据输入值执行
推送
/
拼接
。没什么问题。谢谢。真的很有帮助
var needed = ["name", "position", "salary"];

$("#name, #position, #salary").change(function()
{
    if(needed.length == 0) return;
    needed.splice(needed.indexOf($(this).attr('id')), 1);
    if(needed.length == 0)
        console.log("All data are changed");
});