JavaScript无法找到angularjs生成的div

时间:2015-03-27 08:48:10

标签: javascript jquery angularjs angularjs-ng-repeat

这是我的angularjs生成ng-repeat以在滑块中加载图像。然后我使用javascript来获取imageHolder下的div。 java脚本如下所示。问题是java脚本没有找到angularjs生成的div,但如果我在那里硬编码div,那么javascript就会找到它。 有解决方案吗

 <div id="imageHolder" style="width:527px" >
                  <div alt="{{l.link}}" style="background-color:white; background-image:url({{l.link}}) ;
                  background-repeat:no-repeat; background-size:contain;
                  background-position:center; width:70px;height:85px;
                  display:inline-block;border: 1px solid #C1C1C1; margin:8px;
                  float-inherit"
                  ng-repeat="l in imageLinks "  
                  ></div>


                  <div alt="img/nex1.jpeg" style="background-color:white; background-image:url(img/nex1.jpeg) ;background-repeat:no-repeat; background-size:contain;background-position:center; width:70px;height:85px;display:inline-block;border: 1px solid #C1C1C1; margin:8px;float-inherit">
                  </div>


                </div>

获取div的JavaScript:

$('#imageHolder div').hover(function(){
console.log('inside hover function');});

&#39;内部悬停功能&#39;为硬编码的div打印,但不为angularjs生成的div打印。

5 个答案:

答案 0 :(得分:0)

由于div后来生成,.hover()不识别那些, 使用.on()jquery事件作为

$(document).on( "hover","#imageHolder div", function() {
  console.log('inside hover function');
});

答案 1 :(得分:0)

当你进行绑定时,你确定这些div在Dom中可用吗?

我认为这可能是问题所在。

答案 2 :(得分:0)

而不是

$('#imageHolder div').hover(function(){
console.log('inside hover function');});

你应该做

$('#imageHolder').on('hover', 'div', function(){
console.log('inside hover function');});

这是因为当你执行'bind'调用时,div不存在。 'on'方法捕获所有div,因为它将处理程序附加到父元素。

答案 3 :(得分:0)

尝试使用Directive和属性div:AngularJS Directive docs here,在编译html后调用链接函数,因此将应用ng-repeat

// index.html的

<div id="imageHolder" style="width:527px" >
    <div alt="{{l.link}}" style="background-color:white; 
          background-image:url({{l.link}}) ;
          background-repeat:no-repeat; background-size:contain;
          background-position:center; width:70px;height:85px;
          display:inline-block;border: 1px solid #C1C1C1; margin:8px;
          float-inherit"
          ng-repeat="l in imageLinks " my-directive>
    </div>
</div>

// app.js

angular.module('myModule', [])
.controller('myController', ['$scope', function($scope) {
  //controller code
}])
.directive('myDirective', function() {

  function link(scope, element, attrs) {
    $(element).on('hover', function(){
        console.log('inside hover function');
    });
  }

  return {
    link: link
  };
});

答案 4 :(得分:0)

您应该使用angular指令将行为附加到元素。对于悬停,角度为ng-mouseenter

定义要在控制器上调用的函数:

$scope.onHover = function(l) {
    console.log('inside hover function', l.link);
};

然后将其附加到每个div

<div alt="{{l.link}}" style="background-color:white; 
      background-image:url({{l.link}}) ;
      background-repeat:no-repeat; background-size:contain;
      background-position:center; width:70px;height:85px;
      display:inline-block;border: 1px solid #C1C1C1; margin:8px;
      float-inherit"
      ng-repeat="l in imageLinks"
      ng-mouseenter="onHover(l)">
</div>