JavaScript 无法找到 angularjs 生成的 div
JavaScript not able to find angularjs generated divs
这是我 angularjs 生成的 ng-repeat,用于在滑块中加载图像。然后我使用 java 脚本获取 imageHolder 下的 div。
java 脚本如下所示。问题是 java 脚本找不到 angularjs 生成的 div,但是如果我在那里硬编码 div,那么 java 脚本会找到它.
任何解决方案?
<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>
JavaScript 得到 div:
$('#imageHolder div').hover(function(){
console.log('inside hover function');});
'inside hover function' 为硬编码 div 打印,但不为 angularjs 生成的 div 打印。
由于 div 是稍后生成的,.hover() 无法识别它们,
使用 .on() jquery 事件作为
$(document).on( "hover","#imageHolder div", function() {
console.log('inside hover function');
});
您确定在进行绑定时 Dom 这些 div 可用吗?
我认为这可能是问题所在。
而不是
$('#imageHolder div').hover(function(){
console.log('inside hover function');});
你应该做
$('#imageHolder').on('hover', 'div', function(){
console.log('inside hover function');});
这是因为当您执行 'bind' 调用时,div 不存在。 'on' 方法捕获所有 div,因为它将处理程序附加到父元素。
尝试使用指令和 属性 div : AngularJS Directive docs here,link 函数在编译 html 之后被调用,所以你的 ng-将应用重复
//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
};
});
您应该使用 angular 指令将行为附加到元素。对于悬停,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>
这是我 angularjs 生成的 ng-repeat,用于在滑块中加载图像。然后我使用 java 脚本获取 imageHolder 下的 div。 java 脚本如下所示。问题是 java 脚本找不到 angularjs 生成的 div,但是如果我在那里硬编码 div,那么 java 脚本会找到它. 任何解决方案?
<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>
JavaScript 得到 div:
$('#imageHolder div').hover(function(){
console.log('inside hover function');});
'inside hover function' 为硬编码 div 打印,但不为 angularjs 生成的 div 打印。
由于 div 是稍后生成的,.hover() 无法识别它们, 使用 .on() jquery 事件作为
$(document).on( "hover","#imageHolder div", function() {
console.log('inside hover function');
});
您确定在进行绑定时 Dom 这些 div 可用吗?
我认为这可能是问题所在。
而不是
$('#imageHolder div').hover(function(){
console.log('inside hover function');});
你应该做
$('#imageHolder').on('hover', 'div', function(){
console.log('inside hover function');});
这是因为当您执行 'bind' 调用时,div 不存在。 'on' 方法捕获所有 div,因为它将处理程序附加到父元素。
尝试使用指令和 属性 div : AngularJS Directive docs here,link 函数在编译 html 之后被调用,所以你的 ng-将应用重复
//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
};
});
您应该使用 angular 指令将行为附加到元素。对于悬停,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>