2014-03-26 50 views
0

在我的表单中,在'keyup'上 - 我触发了一个自定义事件。但它不起作用。我也需要从触发器接收值。jQuery - 自定义触发器无法正常工作

这里是我的代码:

(function($){ 

    $(document).on('nameEnter', showName); 

    input = $('#name'); 
    input.on('keyup', function(){ 
     var value = $(this).val(); 
     $.event.trigger({ 
      type:'nameEnter', 
      value:value, 
      time: new Date() 
     }); 
    }); 

    var showName = function(params){ 
     console.log('params is', params); //nothing happening! 
    }; 

}(jQuery)); 

Live Demo is Here.

回答

1

必须先将定义showName您将它传递给.on方法:

var showName = function(params){ 
    console.log('params is', params); 
}; 

$(document).on('nameEnter', showName); 
1

您需要正确声明函数,它的工作:

(function($){ 

    $(document).on('nameEnter', showName); 

    input = $('#name'); 
    input.on('keyup', function(){ 
     var value = $(this).val(); 
     $.event.trigger({ 
      type:'nameEnter', 
      value:value, 
      time: new Date() 
     }); 
    }); 

}(jQuery)); 

    function showName (params){ 
     console.log('params is', params.value); 
    }; 

You can check it in action here

1

的主要问题是是你声明你的函数

更改此

  var showName = function(params){ 
      console.log('params is', params); //nothing happening! 
      }; 

  function showName (params){ 
       console.log('params is', params.value); 
      }; 

这有做的功能准备范围的方式更多这里

Difference between assigning function to variable or not

主要区别是第一个(函数声明)悬挂在声明范围的顶部,而第二个(函数表达式)不是。

这就是为什么你无法访问函数表达式之前手