2016-07-15 67 views
1

我必须映射到特定的控制器和视图特定的路线:在装模板的jQuery丢失目标

app.config(['$routeProvider', function ($routeProvider) { 
    $routeProvider 
    .when('/create', { 
     templateUrl: 'partials/form/form.html', 
     controller: 'TournamentCreateController' 
    }); 
}]); 

在这种form页我在内的一些泛音,以及:

<div ng-include="'partials/form/start.html'"></div> 

而且这start.html有一个元素如:

<input id="time" type="text" ng-model="time"> 

当我尝试激活该元素上的JavaScript组件,它完全忽略了它的目标(#time)。我尝试了以下内容:

app.controller('TournamentCreateController', function ($scope, $rootScope, service) { 
    $('#time').on('click', function() { alert('Time clicked'); }); 
} 

而当输入被点击时,不显示任何提示。但是,如果我将start.html(部分)中的元素移至包含它的父项,form.html,则jQuery可以正常工作。

这是什么问题,我该如何解决它?

回答

0

这看起来像事件绑定的时间问题。将事件绑定更改为父级中存在的元素,然后将'#time'作为.on方法调用的第二个(三个)参数。

的。对调用看起来是这样的:

$('#<replace_with_id_from_parent_page>').on('click', '#time', function(){ alert('Time clicked'); }); 
1

的问题是,当执行$('#time').on('click', function() { alert('Time clicked'); });start.html DOM还没有准备好。

您可以使用ng-click来做同样的事情。

<input id="time" type="text" ng-model="time" ng-click="onTimeClick()"> 

app.controller('TournamentCreateController', function ($scope, $rootScope, service) { 
    $scope.onTimeClick = function() { alert('Time clicked'); }); 
} 
+0

以及如果我只是想声明'#time'作为组件?我的意思是,只是绑定一个函数,所以它是一个时间选择器。或者,例如,我正在使用的CSS框架具有内置指令,可以自动为您执行此操作。但问题依然存在,因为你指出(我猜)。那么我该如何正确地绑定它? – dabadaba

+0

@dabadaba在这种情况下,您需要创建一个指令,并在指令内部操作DOM。 –