Как удалить обработчик с помощью селектора d3.js

Я случайно наложил один и тот же обработчик событий поверх элементов svg с помощью селекторов d3, которые я обновлял.

add_listeners = function() {
    d3.selectAll(".nodes").on("click", function() { 
        //Event handler to highlight clicked d3 element
    });

    jQuery('#some_navigation_button').on('click', function() { 
        //Event handler 
    });
    jQuery('#some_refresh_button').on('click', function() { 
        //Event handler that re-draws some d3 svg elements
    });

    //... 5 other navigation and d3 handlers
}

add_listeners() было повторное добавление тех же обработчиков. Поэтому я попробовал

add_listeners = function() {
    d3.selectAll(".nodes").off();
    jQuery('#some_navigation_button').off();
    jQuery('#some_refresh_button').off();

    d3.selectAll(".nodes").on("click", function() { 
        //Event handler 
    });
    jQuery('#some_navigation_button').on('click', function() { 
        //Event handler 
    });
    jQuery('#some_refresh_button').on('click', function() { 
        //Event handler that re-draws some d3 svg elements
    });

    //... 5 other navigation and d3 handlers
}

без везения.

Примечания: используя d3 v2.9.1,

Ответ 1

Выяснилось, что хотя .off() не поддерживается для d3 v2.9.1, альтернатива .on('click',null)

С

add_listeners = function() {
    // Remove handler before adding, to avoid superfluous handlers on elements.
    d3.selectAll(".nodes").on('click',null);

    d3.selectAll(".nodes").on("click", function() { 
        //Event handler 
    });
}

Ссылка:

Нашел эту информацию здесь:

http://objjob.phrogz.net/d3/method/1128