2012-05-16 38 views
2

我有幾個只讀textfields和一個用普通的舊javascript寫的日期選擇器。問題是我需要檢測文本何時被設置,但是因爲同一個js在整個站點的任何地方都使用,所以我不能將代碼(如something.trigger('change'))放在js文件中。有沒有其他方法可以在不修改日曆js的情況下檢測更改?有沒有一種方法來檢測何時通過jquery設置值?

回答

2

那麼如果在某些情況下使用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

+0

突變事件從來沒有得到很好的支持。雖然不確定如何使用'setInterval',當然OP可以在日曆的祖先元素上使用一個click事件,並從中運行該函數(也許稍微延遲一下給日曆時間來更新值)?如果用戶未在日曆上單擊,則值不會更改。 – RobG

+0

@RobG,因此用戶可以在日曆激活時設置事件,並且在值更改時不會重置該事件。對我來說似乎合乎邏輯。 – epascarello

相關問題