2016-04-22 3 views
0

Для упрощения, я хочу, чтобы добавить событие, сказать привет к кнопке:передавая имя «addEventListener» в качестве параметра

var b= document.getElementById("palabras"); 
 
function fun2(){ 
 
\t alert("hello"); 
 
} 
 
function e(func){ 
 
\t b.window[func]("click", fun2); 
 
} 
 
e("addEventListener");
<button id="palabras">words</button>
В результате в консоли говорит Uncaught TypeError: Cannot read property 'addEventListener' of undefined

+0

Это не метод окна, а элемент. Вы также не делаете «d.window.addEventListener»? – PeeHaa

ответ

1

слушатель событий должен быть добавлен к элементу, а не к b['window'].

Изменить

b.window[func]("click", fun2); 

в

b[func]("click", fun2); 

Демо:

var b= document.getElementById("palabras"); 
 
function fun2(){ 
 
\t alert("hello"); 
 
} 
 
function e(func){ 
 
\t b[func]("click", fun2); 
 
} 
 
e("addEventListener");
<button id="palabras">words</button>

+0

Запуск 'window [func] === addEventListener' на консоли дает мне' true' '' func = "addEventListener", тогда почему не так ?. Другой вопрос заключается в том, почему 'b. [Func]' также ошибочен, с точкой? – user2495207

+0

@ user2495207 Здесь 'func' является' addEventListener', и вы в основном выполняете 'window.addEventListener === addEventListener'. Эта функция работает на любом [EventTarget] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget), а 'window' оказывается по умолчанию. Например, выполнение 'window.setTimeout()' точно такое же, как и для 'setTimeout()' (если вы не объявите функцию с тем же именем). О вашем втором вопросе: 'b [func]' называется записью в виде скобок и позволяет вам использовать имя переменной для вашей функции. 'b.func', однако, ожидает, что функция с именем' func' будет существовать. – blex

0

Вам не нужно, чтобы добавить window, проверить рабочий код -

<script> 
var b= window.document.getElementById("palabras"); 
console.log(b); 
function fun2(){ 
    alert("hello"); 
} 
function e(func){ 
    b[func]("click", fun2); 
} 
e("addEventListener"); 
</script> 

Если консоль document.getElementById("palabras"); это утешит цель и на этой цели вам нужно addEventListner поэтому нет необходимости для window здесь, просто используйте b[func]("click", fun2);.

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