2
我有幾個只讀textfields和一個用普通的舊javascript寫的日期選擇器。問題是我需要檢測文本何時被設置,但是因爲同一個js在整個站點的任何地方都使用,所以我不能將代碼(如something.trigger('change')
)放在js文件中。有沒有其他方法可以在不修改日曆js的情況下檢測更改?有沒有一種方法來檢測何時通過jquery設置值?
我有幾個只讀textfields和一個用普通的舊javascript寫的日期選擇器。問題是我需要檢測文本何時被設置,但是因爲同一個js在整個站點的任何地方都使用,所以我不能將代碼(如something.trigger('change')
)放在js文件中。有沒有其他方法可以在不修改日曆js的情況下檢測更改?有沒有一種方法來檢測何時通過jquery設置值?
那麼如果在某些情況下使用JavaScript來更改值,那麼onchange不會觸發。
有mutation events,但他們已被棄用,未來會有突變觀察員,但他們很長時間不會得到完全支持。那麼你可以在同一時間做什麼?
您可以使用計時器來檢查元素。
function addValueListener(elemId, callback) {
var elem = document.getElementById(elemId);
var lastValue = elem.value;
window.setInterval(function() {
var value = elem.value;
if (value !== lastValue) {
callback();
lastValue = value;
}
},10);
}
寫成jQuery的:
function addValueListener(elemId, callback) {
var elem = $(elemId);
var lastValue = elem.val();
window.setInterval(function() {
var value = elem.val();
if (value !== lastValue) {
callback();
lastValue = value;
}
},10);
}
運行實例:jsFiddle
突變事件從來沒有得到很好的支持。雖然不確定如何使用'setInterval',當然OP可以在日曆的祖先元素上使用一個click事件,並從中運行該函數(也許稍微延遲一下給日曆時間來更新值)?如果用戶未在日曆上單擊,則值不會更改。 – RobG
@RobG,因此用戶可以在日曆激活時設置事件,並且在值更改時不會重置該事件。對我來說似乎合乎邏輯。 – epascarello