當我在選擇框中更改項目時,DOM的屬性似乎已更改。 所以我下面的編碼:如何檢測DOM屬性的變化?
<select id="hoge">
<option value="0">hoge</option>
<option value="1">piyo</option>
</select>
<script>
var hoge = document.getElementById("hoge").addEventListener("change", func, false);
document.getElementById("hoge").value = 1; // <- (1)
function func(e) {
alert("Detected!");
}
</script>
在這種情況下,當我在選擇框更改項目,func被調用。但是當(1)被調用時,func不會被調用。 更改事件似乎只檢測到用戶提交。
所以我嘗試了MutationObserver。
<select id="hoge">
<option value="0">hoge</option>
<option value="1">piyo</option>
</select>
<script>
var hoge = new MutationObserver(function(mutations) {
alert("Detected!");
});
hoge.observe(document.getElementById("hoge"), { attributes: true, subtree: true });
document.getElementById("hoge").options[1].setAttribute("selected", "selected"); // <- (1)
</script>
在這種情況下,當調用(1)時,調用func。但是,當我在選擇框中更改項目時,func不會被調用。 MutationObserver似乎只檢測屬性。
我想在任何一種情況下調用func。 如何通過腳本檢測DOM屬性中的更改?
是因爲它偵聽只讀屬性改變 –
。 select元素的值是所選選項的值(如果有的話),直接設置它不起作用。 * change *事件旨在用於用戶交互,而不是編程式(例如,最初「當值被更改並且控件失去焦點時」)。 – RobG