JavaScript - 如何检测select元素上的程序化值更改(下拉列表)

时间:2013-10-17 16:25:29

标签: javascript jquery

在JavaScript中,我需要检测某个select元素的值何时因任何原因,包括而以编程方式更改。

仅当用户手动更改所选值时才会触发onchange事件,当其他JavaScript以编程方式更改值时,

这是一个包含各种插件组件的网站,我们不想破解(在某些情况下不能黑客攻击,因为代码驻留在其他网站上)。 因此,只要有程序化更改,我自己就会触发更改事件。我需要实际监控select, listen ,以便更改值。

这可能吗?我还没找到办法。

是否有一些我可以用来频繁轮询价值寻找变化的库?或者其他一些方式?

2 个答案:

答案 0 :(得分:3)

var targetSelect = $('appropriate selector');
var lastVal = targetSelect.val();

setInterval(function() {
    var newVal = targetSelect.val();
    if(newVal !== lastVal) {
        // it changed, fire an event or process it
    }
    lastVal = newVal;
}, intervalSpacing);

传递给“intervalSpacing”的值越低,花费的CPU时间就越多,但是越快意识到它就会发生变化。小心调整。

答案 1 :(得分:0)

您可以使用MutationObservers API来监视对DOM的更改:

https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

您可能必须实际观察所选属性的option节点,而不是观察父select节点,但它应该一样容易。