/**动态监控input的值的变化 赋值value触发
* [changeValueListener 监听 js 修改 input 和 textarea 的 value。]
* @param {[HTMLElement]} element [具有 value 属性的 html 元素,如 input 和 textarea。]
* @param {Function} callback [回调,this 为 element,参数为当前值。]
* @return {[HTMLElement]} [element]
*/
function changeValueListener(id, callback) {
var element = document.getElementById(id);
if (!Array.isArray(element.callbacks)) {
element.callbacks = [];
var valueDes = Object.getOwnPropertyDescriptor(element.constructor.prototype, "value");
Object.defineProperty(element, 'value', {
set: function(v) {
// console.log('set', v, this, arguments);
element.callbacks.forEach(function(callback) {
if(!v)return false;//赋值空不返回 文本清空X 会触发这个事件
if(v.indexOf('@')>-1) {
v=v.substr(1,v.length);
return false;
}
callback.call(this, v);
});
valueDes.set.apply(this, arguments);
},
get: function() {
//console.log('get', this, arguments);
return valueDes.get.apply(this, arguments);
}
});
}
element.callbacks.push(callback);
// return element;
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31486267/viewspace-2739986/ ,如需转载,请注明出处,否则将追究法律责任。