angularjs添加简单jquery事件侦听器

angularjs添加简单jquery事件侦听器,jquery,angularjs,angularjs-directive,Jquery,Angularjs,Angularjs Directive,好吧,我一定错过了一些简单的东西。我正在用angular制作一个应用程序,我想实现一些谷歌分析表单查看代码,所以我想要类似的东西 (function($) { $(document).ready(function() { $(':input').blur(function () { if($(this).val().length > 0) { _gaq.push(['_trackEvent', 'INSERT FORM NAME HERE

好吧,我一定错过了一些简单的东西。我正在用angular制作一个应用程序,我想实现一些谷歌分析表单查看代码,所以我想要类似的东西

(function($) {
  $(document).ready(function() { 
     $(':input').blur(function () {
        if($(this).val().length > 0) {
          _gaq.push(['_trackEvent', 'INSERT FORM NAME HERE', 'completed',   $(this).attr('name')]);
        } 
        else {
           _gaq.push(['_trackEvent', 'INSERT FORM NAME HERE', 'skipped', $(this).attr('name')]);
     });
  });
})(jQuery);

我希望使用这样简单的东西,而不是对每个表单输入都使用指令。这样就可以把它放在一个地方,以便以后移除

但是,此代码从不触发。我将ng includes用于表单的某些部分,因此在我看来,这与传统的document.ready方式类似。附加jquery事件侦听器的方式将不再有效,因为它会在包含这些部分之前触发

我还在顶层表单元素上尝试了如下指令:

angular.module('ngPayment2App')
 .directive('formTracker', function () {
   return {
    restrict: 'E',
    link: function postLink(scope, element, attrs) {
      element.find(':input').on('blur',function(){
        console.log('finally!')
      })
    }
  };
});
“最终”永远不会出现


有人有什么想法吗。我知道我犯了一个noob错误,我只是还不知道它是什么….

只有在应用程序中包含jQuery时,您当前编写的指令才会起作用

这是因为AngularJS只附带了so find,只接受元素,例如input、p、div,所以伪类选择器就像你正在使用的那样:如果你的应用程序中没有jQuery,input将无法工作。 这是通过在AngularJS引用之前向jQuery添加脚本引用来实现的。 此外,jqLite的on函数不支持事件数据。假设您没有动态加载内容,您应该能够使用bind

angular.module('myApp', [])
.controller("MyCtrl", function ($scope) {})
.directive('formTracker', function ($timeout) {
    return {
        restrict: 'E',
        link: function postLink(scope, element, attrs) {
            // Requires jQuery
            element.on('blur', ':input', function () {
                console.log('finally!');
            });

            // Timeout added for display purpose only
            // Wait 3 seconds and add a new HTML input
            $timeout(function(){
                element.append('<br><span>Element added after DOM has finished rendering</span><br><input id="dynamic-element" name="dynamic-elemen" type="text">');
            }, 3000);

        }
    };
});

From docs:find-仅限于按标记名进行查找实际上我在angular之前导入了jQuery,所以不是这样。我认为是DOM没有准备好。。。如果我在超时时间内添加jquery调用2秒,一切正常。@jessehensold我已经更新了JSFIDLE;您只需要将on func更新为类似元素。on'blur',':input',函数{console.log'finally!';};将模糊事件附加到与以下选择器匹配的所有项,而不管它们何时添加到DOM,即DOM完成加载后。