2015-03-24 3 views
0

У меня есть этот яваскрипта кодфункции addEventListener в настоящее время выполняются, когда слушатель объявлен

function change (elem){ 
    if (x==1) elem.innerHTML = "1"; 
    else elem.innerHTML = "not 1"; 
} 
var test = document.getElementById ("abc"); 
var x=1; 

test.addEventListener ("click", change(test)); 

и HTML выглядит следующим образом

<body> 
    <div id="abc">a div</div> 
</body> 

Как предотвратить функцию от не выполняются до тех пор элемент сНу нажал? Сейчас он просто меняет innerHTML сам по себе, и я хочу, чтобы он дождался прослушивателя кликов.

ответ

3

Это выполняется немедленно, потому что вы вызова сразу:

test.addEventListener ("click", change(test)); 

Вам нужно передать функции, а не результат вызова функции:

test.addEventListener("click", 
    function() { 
    change(test); 
    } 
); 
+0

Я не вижу ничего плохого в вашем ответе. Я не был уверен, что я должен поместить кого-то с голосом без причины. – RobertoNovelo

0
test.addEventListener("click", function(){ change(this);}); 
0

Вы немедленно запустить функцию изменения() из-за скобкой.

Другой способ сделать то, что вы пытаетесь передать функции по ссылке и использовать this, чтобы получить элемент.

function change(){ 
    if (x==1) this.innerHTML = "1"; 
    else this.innerHTML = "not 1"; 
} 
var test = document.getElementById ("abc"); 
var x=1; 

test.addEventListener ("click", change); 
Смежные вопросы