angularjs添加简单jquery事件侦听器
好吧,我一定错过了一些简单的东西。我正在用angular制作一个应用程序,我想实现一些谷歌分析表单查看代码,所以我想要类似的东西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
(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完成加载后。