Javascript 当我不';我不知道jQuery的变化时刻?
我的HTML代码中有一个隐藏的输入,我想知道输入值什么时候改变了Javascript 当我不';我不知道jQuery的变化时刻?,javascript,jquery,Javascript,Jquery,我的HTML代码中有一个隐藏的输入,我想知道输入值什么时候改变了 <input type="hidden" id="myInputHidden" /> 首先,这不起作用,我在许多帖子中读到,我必须手动触发事件 问题是我不知道输入值何时(何地)更改,因此无法触发该事件。将更改为隐藏字段的唯一方法是通过脏检查,例如: (函数(){ var myHidden=document.getElementById('myInputHidden'), currentValue=myHidden.v
<input type="hidden" id="myInputHidden" />
首先,这不起作用,我在许多帖子中读到,我必须手动触发事件
问题是我不知道输入值何时(何地)更改,因此无法触发该事件。将
更改为隐藏字段的唯一方法是通过脏检查,例如:
(函数(){
var myHidden=document.getElementById('myInputHidden'),
currentValue=myHidden.value;
setTimeout(函数myHiddenOnChange(){
如果(myHidden.value!==currentValue){
currentValue=myHidden.value;
myHiddenChanged.call(myHidden);
}
设置超时(myHiddenOnChange,30);
}, 30);
函数myHiddenChanged(){
//这是隐藏字段的“更改”事件
}
})();
我不建议这样做,但另一种方法是重写HTMLInputElement.prototype
描述符:
(function() {
var _htmlInputElementValue = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'),
_htmlInputElementValueSet = _htmlInputElementValue.set,
_ev = document.createEvent('Event');
_ev.initEvent('change', true, true);
_htmlInputElementValue.set = function() {
_htmlInputElementValueSet.apply(this, [].slice.call(arguments));
if (this.type === 'hidden') {
this.dispatchEvent(_ev);
}
}
Object.defineProperty(HTMLInputElement.prototype, 'value', _htmlInputElementValue);
})();
这样做,任何时候有人更改隐藏字段的值
属性时,它都会触发更改
事件,因此,如果您正在收听该事件,您的代码将开始工作。我不明白第二段代码如何不工作,为什么您认为它不工作?是的。。。那是一个选择。。但我想最后用一个肮脏的选项resource@Phoenix_uy它是唯一一个:)@Phoenix\u uy EventListeners只与用户输入一起工作,而且由于隐藏字段永远不会获得用户交互,因此它永远不会触发任何事件,因此您有两个选择:创建一个方法,例如setHiddenValue
,这将更改隐藏字段的值
属性并手动触发事件(然后将整个代码更改为使用setHiddenValue
方法,而不是直接更改value
属性。另一个是通过脏检查,由您决定。@Phoenix_uy我为您更新了另一个解决方案。
(function() {
var _htmlInputElementValue = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'),
_htmlInputElementValueSet = _htmlInputElementValue.set,
_ev = document.createEvent('Event');
_ev.initEvent('change', true, true);
_htmlInputElementValue.set = function() {
_htmlInputElementValueSet.apply(this, [].slice.call(arguments));
if (this.type === 'hidden') {
this.dispatchEvent(_ev);
}
}
Object.defineProperty(HTMLInputElement.prototype, 'value', _htmlInputElementValue);
})();