2015-10-15 26 views
0

我在我的HTML代碼中有一個隱藏的輸入,我想知道輸入值何時發生了變化。當我不知道使用jQuery進行更改時,隱藏字段上的觸發器更改事件?

<input type="hidden" id="myInputHidden" /> 

我可以做這樣的事情:

$('#myInputHidden').on('change', function() { 
    alert('triggered'); 
}); 

首先,這並不工作,並在很多帖子我看了,我必須手動觸發事件。

問題是我不知道什麼時候(和哪裏)輸入值被改變,所以我不能觸發該事件。

+0

我沒有看到代碼的第二部分不起作用,爲什麼你認爲它不? –

回答

2

實施change事件的隱藏字段的唯一方法是通過髒檢查,如:

(function() { 
    var myHidden = document.getElementById('myInputHidden'), 
     currentValue = myHidden.value; 

    setTimeout(function myHiddenOnChange() { 
    if (myHidden.value !== currentValue) { 
     currentValue = myHidden.value;  
     myHiddenChanged.call(myHidden); 
    } 

    setTimeout(myHiddenOnChange, 30); 
    }, 30); 

    function myHiddenChanged() { 
    // that's your hidden field's 'change' event 
    } 
})(); 

我不建議這樣做,但另一種方法是重寫在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); 
})(); 

做的是,只要有人改變了value隱藏字段的屬性,它會觸發change事件,因此,如果您正在收聽該事件,那麼您的代碼將開始工作。

+0

是的...這是一個選項..但是一個骯髒的選項,我想用作最後一個資源 –

+0

@Phoenix_uy它是唯一的一個:) – Buzinas

+0

@Phoenix_uy EventListeners只適用於用戶輸入,並且由於隱藏的域永遠不會獲取用戶交互,它永遠不會觸發任何事件,所以你有兩個選擇:創建一個方法,例如'setHiddenValue',它將改變隱藏字段的'value'屬性並手動觸發事件(然後改變你的整個代碼使用'setHiddenValue'方法而不是直接改變'value'屬性,另一個是通過髒檢查,取決於你。 – Buzinas