Javascript 如何使用jquery处理具有数组的新字段

Javascript 如何使用jquery处理具有数组的新字段,javascript,php,jquery,performance,Javascript,Php,Jquery,Performance,例如,我有3个字段,用户可以输入数字a、b、c 所以字段C将检查字段C中输入的数字是否b 在表单中,我有一个按钮,可以创建一个附加行 另一个a,b,c;所以我不知道如何像以前一样控制同样的操作 最好的方法是使用最接近的函数 $(".c").change(function(){ if($(this).val() > $(this).closest('.a').val() || $(this).closest('.c').val() < $('.b').val())

例如,我有3个字段,用户可以输入数字a、b、c

所以字段C将检查字段C中输入的数字是否b

在表单中,我有一个按钮,可以创建一个附加行 另一个a,b,c;所以我不知道如何像以前一样控制同样的操作


最好的方法是使用最接近的函数

$(".c").change(function(){

        if($(this).val() > $(this).closest('.a').val() || $(this).closest('.c').val() < $('.b').val()) 
                {
         $(this).closest('.c').css( "backgroundColor", "#ff0000" );    
                }else{
                $(this).closest('.c').css( "backgroundColor", "#00FF00" );        
                }           
        });
不会冒泡,这意味着您需要为表单中的每个输入使用事件侦听器

当将选择器与第二个参数一起使用时,jQuery将自动处理这个问题,这相当于旧的弃用参数。根据官方文件中的描述,它将:

根据一组特定的根元素,将处理程序附加到与选择器匹配的所有元素的一个或多个事件上(现在或将来)

所以,如果你这样做:

$('.details').on('change', 'input', (event) => { ... });
这将侦听与.details选择器匹配的所有元素中的任何元素上的更改事件,无论它们在调用该方法时是否已经存在,或者它们是否是在以后创建的,因为这是您的情况

现在,一旦发生更改事件,您应该使用和方法来选择触发事件的所在行,从那里您可以根据它们的位置或选择器、它们的值获得所有3个输入,并执行逻辑来更新该特定行

无论如何,如果您使用输入而不是侦听更改事件,那么您可以从中受益。这意味着在这种情况下,将为整个系统创建一个事件侦听器,而不是每个系统创建一个。使用event.target,您将能够区分哪一个触发了事件,您需要使用哪一个来获取同一行中的其他输入

总的来说,它看起来是这样的:

$('.details').on('change', 'input', (event) => { ... });
//最好保留引用,而不是每次都获取引用: const details=$'details'; 详细信息。关于“输入”,“输入”,事件=>{ const children=$event.target.parents.eq1.children; const avgInput=children.eq3.find'input'; const max=parseIntchildren.eq1.find'input'.val; const min=parseIntchildren.eq2.find'input'.val; const avg=parseIntavgInput.val; 如果isNaNmax | | isNaNmin | | isNaNavg{ //如果其中任何一个是空的,不要做任何事情。 回来 } css'backgroundColor',avg>max | | avg{ 如果确认“您确定要删除该行吗?”{ $event.target.parents.eq1.remove; } }; $“添加”。单击=>{ details.append` Cota1 删去 `; }; 身体{ 字体系列:无衬线; 字体大小:.75rem; } 桌子{ 边界塌陷:塌陷; 表布局:固定; 位置:相对位置; } 表th, 表td{ 宽度:20%; 填充:0; 边框底部:1px实心EEE; 高度:1.75雷姆; } 输入{ 宽度:100%; 框大小:边框框; 填充:.5rem; 边界:无; 大纲:无; 文本对齐:居中; } 输入:悬停{ 背景:fafa; } 输入:焦点{ 背景:FFA; } .移除{ 宽度:100%; 框大小:边框框; 填充:.5rem; 边界:无; 大纲:无; 背景:FFF; 光标:指针; } 。移除:悬停{ 背景:F44; } 加{ 宽度:100%; 边界:无; 背景:FFF; 填充:.5rem; 边界半径:2px; 颜色:000; 文本转换:大写; 字体大小:.75rem; 保证金:1雷姆0; 盒影:0 0 1rem rgba0,0,0,25; 过渡:箱影缓变为.125s; } 添加:悬停{ 盒影:0.5雷姆rgba0,0,0,25; } 托尔+ 托尔- 平均值 Cota1 添加
.delegate在几年前的jQuery 1.7中被.on取代,在3.0中被弃用。您不应该将其用于新代码。谢谢Rahul的回答,但是比较和新词都不起作用。。。我试图找到最接近的值,但为空。。。你能帮我更多吗?