Почему мой обратный вызов не вызывается?

1
var handler = new Handler();

var iife = (function() {
    return {
        doAlert: doAlert
    };

    function doAlert() {
        alert('testing');
    }
})();

function Bar(){
  this.doFirst = function(){
    handler.add("x", iife.doAlert);
  }
}

function Handler(){
  this.add = function(caption, callback){
    var linkText = document.createTextNode(caption);
    var href = document.createElement("a");
    href.appendChild(linkText);
    href.setAttribute("href", "#");
    href.setAttribute("onclick", callback);

    $(".bc").append(href);
  }
}

Учитывая этот код, мой обратный вызов отображается в Dom как

function doAlert() {
    alert('testing');
}

Это буквально в моем атрибуте onclick. Очевидно, это не то, что я хочу. Что мне нужно сделать, это отобразит мое предупреждение? Я ожидал увидеть что-то вроде doAlert(), почему это не так?

Теги:
callback

1 ответ

6
Лучший ответ

Значения атрибутов - это строки. Поскольку вы передаете функцию, ее метод .toString() неявно вызывается для установки значения атрибута для onclick.

Никогда не используйте атрибуты onclick. addEventListener этого используйте addEventListener.

href.addEventListener("click", callback);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню