2017-09-04 62 views
0

我有JQuery li元素,我想模拟点击。我已经写了一个角度很小的函数来这样做,但它似乎并没有工作。引导选项卡模拟单击不工作在JQuery

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()方法在成功/错误承诺中。

+0

这似乎是反模式,但是使用本地点击'$(选择)获得(0)。点击();'代替'.trigger(“click”)' – Satpal

+0

你知道SO有一个用于运行代码的js/html引擎 – Edwin

+0

不好运行 –

回答

0

也许我想起角错,但是当你设置

settings.serviceDays = days; 

不认为再次进行ng-repeat="day in settings.serviceDays"运行?如果是这样,那么这些元素似乎有可能没有时间被呈现(并且被分配了onclick回调)。

你应该能够测试,如果这是进一步延迟调用settings.triggerClick(settings.serviceLevels);(它已经通过API调用延迟,像你这样的暗示)的情况。 setTimeout就足够好来检验这个理论:

setTimeout(() => settings.triggerClick(settings.serviceLevels), 500) 

我不知道正确的方法是推迟一个函数调用,直到ng-repeat完成(如果原来是你的问题的根源),但我发现这太问题,有一些想法:ng-repeat finish event

+0

设置超时但不起作用 –

+0

当您尝试手动操作时,“li”的回调会起作用吗? – jonahe

+0

是的 - 这是为bootstrap选项卡,当我手动点击它 - 它没有问题 –

0

固定它到底调用引导标签功能,迫使标签被激活,所有其他处于非活动状态:

for (var i = 0; i < levels.length; i++) { 
    $("#Monday-" + levels[i].LevelTmsCode + "-tab").tab("show"); 
    $("#tabContent-Tuesday-" + levels[i].LevelTmsCode).hide(); 
    $("#tabContent-Wednesday-" + levels[i].LevelTmsCode).hide(); 
    $("#tabContent-Thursday-" + levels[i].LevelTmsCode).hide(); 
    $("#tabContent-Friday-" + levels[i].LevelTmsCode).hide(); 
    $("#tabContent-Saturday-" + levels[i].LevelTmsCode).hide(); 
    $("#tabContent-Sunday-" + levels[i].LevelTmsCode).hide(); 
} 

和th恩呼吁超时功能,允许角的渲染时间:

setTimeout(() => settings.triggerClick(settings.serviceLevels), 500);