仅显示动态添加的选定元素值
Show only Dynamically Added selected Element value
当我尝试在单击时显示选定的元素值时,它显示了所有元素值..在下面的代码中,如果我添加了用户名,当我们单击任何标签时,它必须显示其相应的删除图标..但是在这里,它向所有添加的标签显示删除图标。你能告诉我如何解决这个问题吗?
演示
var app = angular.module('myapp', ['ngSanitize']);
var counter = 0
app.controller('MainCtrl', function($scope, $compile) {
$scope.add = function(index) {
var username = '<div ng-click="showRemove()"><label>User Name</label>//click//<input type="text"><button id="buttonId'+counter+'" ng-show="remove">-</button></div>';
var user = $compile(username)($scope);
angular.element(document.getElementById('add')).append(user);
};
$scope.showRemove = function(){
$scope.remove = true;
}
++counter;
});
<!DOCTYPE html>
<html ng-app="myapp">
<head>
<script src="https://code.angularjs.org/1.4.8/angular.js"></script>
<script src="https://code.angularjs.org/1.5.0-rc.0/angular-sanitize.min.js"></script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="add($index)">Add</button>
<hr>
<div id="add"></div>
</body>
</html>
如果你想
保持接近你试图解决它的方式,这可能是一个解决方案:
var app = angular.module('myapp', ['ngSanitize']);
var counter = 0
app.controller('MainCtrl', function($scope, $compile) {
$scope.add = function(index) {
var username = '<div ng-click="showRemove('+counter+')"><label>User Name</label>//click//<input type="text"><button id="buttonId'+counter+'" ng-show="'+counter+ ' == active">-</button></div>';
var user = $compile(username)($scope);
angular.element(document.getElementById('add')).append(user);
++counter;
};
$scope.showRemove = function(counter){
$scope.active = counter;
}
$scope.active = -1;
});
对动态添加的元素使用委托的 jQuery 事件处理程序,而不是内联事件处理程序。无论如何,如果你使用jQuery,jQuery的方式会更好。
将类添加到删除按钮,例如 class="deleteme"
:
var username = '<div ng-click="showRemove()"><label>User Name</label>//click//<input type="text"><button id="buttonId'+counter+'" ng-show="remove" class="deleteme">-</button></div>';
然后处理程序变为
$(document).on('click', '.deleteme', function(){
$(this).closest('div').remove();
});
document
只是动态元素的共同祖先。它可以是用户条目上方的任何共同祖先。
笔记:
- 委托事件处理程序通过侦听事件(单击)以冒泡到共同祖先来工作。 如果没有其他更近/方便,
document
是最好的默认值。然后,他们在事件时将jQuery选择器应用于气泡链中的元素。然后,它将您的函数仅应用于导致事件的匹配元素。传递给事件函数的this
值将是单击的匹配项。 - 内联处理程序(如
onclick=""
)将事件注册与事件处理程序分开,没有任何好处。 - 您应该尝试选择最接近元素的共同祖先作为委托事件的目标。尽管
document
高一级,但它是比body
更好的默认值,因为在某些情况下body
可能会失败。 - 委托事件的连接速度比单个事件处理程序更快。权衡是在事件时速度略有降低,但是(这是一个很大的但是),事件时的速度差异永远不会被注意到,因为您不能每秒单击鼠标 50,0000 次:)
相关文章:
- 在JavaScript中,如何修复元素显示和变量创建之间的初始差异
- 使用漂亮的照片点击另一个元素显示图像
- 我将如何在 HTML 中将数组中的所有元素显示为可点击的对象
- 使元素显示在最小屏幕大小上
- 更好的做法是通过CSS类或直接(通过DOM)修改HTML元素显示
- 如何在YouTube视频前制作元素显示
- 使隐藏元素显示 X 秒
- 如果元素显示:无;在媒体查询中,它们是否仍然加载
- 无法为每个元素显示高图
- 如何使用 jQuery 逐个元素显示
- 使用 jQuery 画布元素显示 Hiddin Div
- '李'mouseover事件被child'a'元素显示块
- JQuery元素显示/隐藏和控制流
- D3在工具提示上将内部列表的元素显示为不同的行
- AngularJS-动态创建<text区域>使用ngSanitize不会't显示(其他元素显示)
- 如何根据单击的元素的位置使元素显示在右侧或左侧
- 响应元素显示:无;在移动宽度,然后通过javascript按钮返回,但显示的链接断开:block;
- 当我再次单击时,它显示none,高度回到0px,但里面的元素显示,不显示none或离开页面
- 将一个元素显示在另一个元素的顶部,并在其上禁用鼠标悬停事件
- reactjs:为什么在render中定义的一些dom元素显示两次