【发布时间】:2017-09-04 13:06:28
【问题描述】:
我有想要模拟点击的 JQuery li 元素。我已经用 Angular 编写了一个小函数来做到这一点,但它似乎不起作用。
settings.triggerClick = function (levels) {
for (var i = 0; i < levels.length; i++) {
$("#Monday-" + levels[i].LevelCode + "-tab").trigger("click");
}
}
这里是这样调用的:
// Get Service Levels to Build Delivery Rules Accordion
settings.getDeliveryServices = function() {
$http.get(resourceBase + "api/service/levels").success(function(data) {
settings.serviceLevels = data;
// Get Service Days
$http.get(resourceBase + "api/service/days").success(function(days) {
settings.serviceDays = days;
// Build the Accordion
settings.accordian(settings.serviceLevels);
settings.triggerClick(settings.serviceLevels);
});
});
}
当页面/角度加载时调用 getDeliveryServices 函数。
我已经调试过了,到目前为止,我已经排除了 serviceLevels 是空的,所以那里不应该有问题。我还确保调试器正在进入 for 循环。当我使用控制台获取该元素时,它会找到正确的 JQuery dom 元素。所以我不确定问题是什么。还值得一提的是,这些元素是由一个角度 ng-repeat 循环生成的。
<li id="{{day.Day}}-{{level.LevelCode}}-tab" ng-repeat="day in settings.serviceDays">
<a id="{{day.Day}}-{{level.LevelCode}}" href="#tabContent-{{day.Day}}-{{level.LevelCode}}" ng-click="settings.changeTab(day, level, $event)">{{day.Day}}</a>
</li>
所以我不知道在寻找之前是否与不可用的元素有关,但是我认为这不是问题,因为我在成功中调用了 settings.triggerClick() 方法/错误承诺。
【问题讨论】:
-
这似乎是反模式,但是使用原生点击
$(selector).get(0).click();而不是.trigger("click") -
你知道SO有一个js/html引擎来运行代码
-
不幸的是没有工作
-
考虑使用UI Bootstrap Tabs。它们提供与 AngularJS 框架集成的 Bootstrap Tabs 指令。使用 AngularJS 框架,控制器不应该直接操作 DOM。 DOM 操作应该封装在AngularJS directives 中。
标签: javascript jquery angularjs twitter-bootstrap