2016-03-10 3 views
2

Это мой код:Почему этот приложенный прослушиватель событий не выполняется?

var myinp = document.querySelector(".myinp"); 
var store = document.querySelector(".store"); 

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

function update(elem) { 
    console.log('Executed'); 
    elem.style.left= this.value + "%"; 
    if(this.value>0) { 
    elem.textContent= this.value; 
    } else { 
    elem.textContent= null; 
    } 
} 

Консоль просто показывает один Executed и даже тогда textContent не меняется.

EDIT

Эта версия кода работает:

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

Пробовал ли вы отлаживать код? Проверьте область, в которой выполняется ваша функция, и посмотрите, на что указывает это «это». Вам нужно понять, как работает область Javascript. – CuriousMind

+0

Что такое событие 'input'? Ввод - это элемент, а не событие –

+0

@ MarcosPérezGude [это демо] (http://codepen.io/abhisack/pen/WvLXdd) работает с «входом». Есть ли объяснения? –

ответ

3

Проблема в том, что функция update выполняется в глобальном контексте (window). Если вы хотите this быть экземпляром ввода необходимо предоставить контекст явно:

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

Помните, что контекст выполнения зависит от пути вы вызываете функцию. В вашем случае update неявно привязана к глобальному объекту, поэтому его называть update() всегда будет this, являющийся window.

+0

Здравствуйте, @dfsq, можете ли вы рассказать нам, что такое событие ввода? –

+1

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

+0

@dfsq Ваше предложение сработало! Спасибо :) Как это работает, когда я не передаю какой-либо параметр? Я обновляю вопрос, чтобы добавить другую версию той же функции, но без каких-либо параметров. Мне нужно знать, чтобы лучше понять JavaScript. –

Смежные вопросы