2016-03-10 77 views
2

這是我的代碼:爲什麼此附加事件偵聽器未執行?

​​

控制檯只是顯示一個Executed甚則textContent不會改變。

編輯

這個代碼版作品:

myinp.addEventListener("input", update, false); 

function update() { 
    thumb.style.left= this.value + "%"; 
    if(this.value>0) { 
    thumb.textContent= this.value; 
    } else { 
    thumb.textContent= null; 
    } 
} 

當我不傳遞任何參數,爲什麼this參考要素,而不是窗戶就像在第一種情況?

+2

你嘗試調試代碼?檢查你的函數執行的範圍,看看'this'指向哪裏。您需要了解Javascript範圍的工作原理。 – CuriousMind

+0

什麼樣的事件輸入是?輸入是一個元素,而不是一個事件 –

+0

@MarcosPérezGude[這個演示](http://codepen.io/abhisack/pen/WvLXdd)作品有「輸入」。有什麼解釋嗎? –

回答

3

的問題是,update函數在全局上下文(window)執行。如果你想this爲輸入情況下,你需要明確地提供上下文:

myinp.addEventListener("input", function() { 
    update.call(this, store); 
}, false); 

請記住,執行上下文取決於調用該函數的方式。在你的情況update被隱含勢必因此調用它像update()全局對象總是有thiswindow

+0

你好@dfsq,你能告訴我們什麼'input'事件是? –

+1

@MarcosPérezGudehttps://developer.mozilla.org/en-US/docs/Web/Events/input –

+0

@dfsq你的建議的工作!謝謝:) 這是如何工作,當我不通過任何參數?我正在更新問題以添加另一個版本的相同功能,但沒有任何參數。我需要知道對JavaScript有更好的理解。 –

相關問題