2015-09-30 27 views
0

有沒有一種事件綁定方式來識別某個選擇字段的選項何時被某些不同的外部不可編輯的JavaScript所更改?使用jquery檢測選擇字段的選項值的更改

只是爲了clearify:我不希望聽值的變化,我想聽聽DOM結構

+0

整個元素是否被替換?需要更多的細節,確切地說是什麼得到修改,並顯示一些結構 – charlietfl

+0

你想要的聲音https://developer.mozilla.org/en/docs/Web/API/MutationObserver –

+0

所以有什麼原因你有標籤這與Oracle Apex?既然你正在談論選擇列表選項,這是一個正在被刷新的列表(例如:級聯列表)嗎?您能否提供一些關於您的實際問題的更多信息,而不是有問題的解決方案? – Tom

回答

2

你有沒有試過這種的變化?

這隻會告訴你結構是否有任何變化。

$(".selectBox").bind("DOMSubtreeModified", function() 
 
{ 
 
    $(".message").append("Structure changed<br>"); 
 
}); 
 

 

 
$("#add").click(function() 
 
{ 
 
    $(".selectBox").append("<option>Added</option>"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
 

 
<button id="add">Add to Select</button> 
 

 

 
<select class="selectBox"> 
 

 

 
</select> 
 

 

 
<div class="message"></div>

如果你一直在尋找像數據或屬性什麼。那麼你可能會尋找類似MutationObserver

MutationObserver爲開發人員提供了一種方式來對DOM中的變化做出反應。它被設計爲DOM3 Events規範中定義的突變事件的替代品。

+0

? OP明確指出他們不需要聽'更改' – charlietfl

+0

@charlietfl - 我已經閱讀過,所以我改變了我的答案。 –

+0

downvote是以前的答案,這是完全錯誤的,因此沒有什麼價值。這應該不是個謎。刪除基於更新的答案但應提及瀏覽器支持以及潛在的無限循環此事件可以創建 – charlietfl

1

尋找「DOM變化」正在削弱它太廣泛。正如您的評論指出的那樣,您正在使用選擇列表中的級聯LOV父項目功能。這將選擇列表變成可刷新的項目,這意味着當其中一個父項目被更改時,它將再次獲得其選項集合。這個刷新基本上是一個AJAX調用。
因爲這是所有內置的,你可以非常簡單地使用綁定事件處理程序的本地特性到這個項目的「刷新後」。沒有必要開始聽dom事件。 「刷新後」是處理這個問題的標準方式。

兩個選項:

  • 使用哪個反作用​​於 「後刷新」 事件 dynamic action creation with after refresh
  • 結合到 「apexafterrefresh」 事件與事件偵聽或jQuery的

    $("#P1_SELECT_LIST").on("apexafterrefresh", function(){ ... }); 
    
  • 一個動態作用

從那裏你可以做任何你想做的事情,但這肯定是窪你去。

+0

儘可能簡單。沒有看到樹木,因爲樹木...非常感謝,這是更方便維護 – nik

+1

@nik Dom樹改變事件監聽器很酷,只是沒有真正到位。另外,請記住您需要支持的瀏覽器。不管怎麼說,如果你這樣做,請記住它有問題。 Dom樹突變事件是通過完成的,突變觀察者是未來。如果你有一些「老」的瀏覽器支持,哎。 https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events – Tom

相關問題