2017-08-01 27 views
0

我目前正在与此有点纠结。情况如下。我在页面上有多个输入字段jQuery - 事件侦听器“更改”仅适用于焦点在对象上

Input1和Input2影响Input3的内容。

现在我想要一个事件处理程序beeing触发如果Input3的内容改变。我试图

$('#div-xy').on('change', 'input', function(){console.log('input changed')}); 

但这似乎只是工作,如果重点也是输入3这是不是这样的,因为我在输入2或输入3我打字。 我也试过

$('#div-xy').bind('DOMSubtreeModified', function(){console.log('CHANGE2')}); 

这可悲的是有同样的效果。你可能有一个想法如何检查Input3的变化?将不胜感激的帮助。

+0

你能共享有关_Input1和输入2的代码影响Input3._ – Satpal

+0

的内容所以,如果你不想监听器附加到所有''显然你需要使用一个不同的选择比'input' – charlietfl

回答

2

更改事件仅触发用户输入,但可以明确触发。

由于您使用jQuery:

$('#input2').change(()=>{ 
    console.log('input 2 is changed'); 

    $('#input3').val('some val'); 
    $('#input3').change() 
}) 

$('#input3').change(()=>{ 
    console.log('input 3 is changed'); 
}) 
+0

谢谢。这就是诀窍。谢谢 – Chris

2

尝试这样的:

如果你有许多这些领域的,而不是一个处理程序绑定到每个人,你会使用委派事件处理程序获得更好的性能:

HTML:

<div id='parent'> 
    <input type="text" class="search-field" /> 
    <input type="text" class="search-field" /> 
    <select class="search-field" ><option>1</option><option>2</option></select> 
    <input type="radio" class="search-field" /> 
</div> 

JS:

$('#parent').on('change', '.search-field', function() { 
    // validate all search field values 
    // display search results based on values 
    // if search results already shown, filter based on $(this).val() 
    console.log($(this).val()); 
}); 
+0

这一个相当不错的方法。不幸的是,我的页面结构几乎是固定的,因为它是一个SharePoint网站,我不想过多地操纵DOM,因为这可能会在后续阶段产生一些问题。 另一件事是,也可能有超过2个输入影响第三个的内容,我发现它应该有点麻烦,以适应所有这些相同的事件处理程序 – Chris

1

从技术上讲,当一个元素的值已经改变用户发生变化的事件。如果input3的值通过jquery或其他代码更改,它将不会自行发生。但是,您可以手动触发其他jquery函数,如果有input.change()的定义,那么它将被执行。