首页 > 解决方案 > e 是递归处理函数的未定义的正确语法

问题描述

如何进行正确的递归调用?在这段代码中,控制台说我“e 未定义”。它是无序列表中按钮 ul 的事件监听器。

这是我的代码:

$("button#ul").on("click", function(event){
    
     var button = $(this);
        $(button).toggleClass("active");
        
        if ($(button).hasClass('active')){


    //event listener
        $(document).on("keydown", **checkExit** = function(e) {
                                            
                            if (exit(e) == true){
                                $(button).removeClass('active');
                                $(this).off("keydown");
                            }
                            **checkExit();**
                       });
    
    
    
    
    
    function exit(event){
            
    //        alert("prevKeyCode: "+prevKeyCode);
            var code = event.keyCode || event.which;
            var doubleEnter = (code == 13 && prevKeyCode == code);
            
            if (event.type == "click"){
                return true;
            }
            else if (event.type == 'keydown'){
                
                
                if (code == 27 || doubleEnter) {
                    prevKeyCode = null;
                    return true;
                }
                else if (code == 13) {
                    prevKeyCode = 13;
                }
                else {
                    prevKeyCode = code;
                }
                return false;
            }
        }
        

我想我应该在函数 checkExit 之外定义...

标签: javascriptjqueryrecursioneventslistener

解决方案


再次调用时需要将事件作为参数传递checkExit

$(document).on("keydown", checkExit = function(e) {
  if (exit(e) == true) {
    $('button').removeClass('active');
    $(this).off("keydown"); //spegne il gestore corrente
  }
  checkExit(e);
});

推荐阅读