2017-08-01 25 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()的定義,那麼它將被執行。