Javascript 禁用ng单击此元素
I一个控制器中有三个按钮,具有ng click功能。当已单击此元素时,如何禁用单击? 下面是一个例子:Javascript 禁用ng单击此元素,javascript,angularjs,Javascript,Angularjs,I一个控制器中有三个按钮,具有ng click功能。当已单击此元素时,如何禁用单击? 下面是一个例子: <div ng-app="myApp"> <div ng-controller="GreetingController"> <button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button> <button ng-click="!IsClickEnable|
<div ng-app="myApp">
<div ng-controller="GreetingController">
<button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button>
<button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button>
<button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button>
</div>
</div>
var myApp = angular.module('myApp', []);
myApp.controller('GreetingController', ['$scope', function($scope) {
$scope.IsClickEnable = true;
$scope.DoSomethingElse = function() {
alert('click')
$scope.IsClickEnable = false;
};
}]);
xyz
xyz
xyz
var myApp=angular.module('myApp',[]);
myApp.controller('GreetingController',['$scope',函数($scope){
$scope.IsClickEnable=true;
$scope.DoSomethingElse=函数(){
警报('单击')
$scope.IsClickEnable=false;
};
}]);
var myApp=angular.module('myApp',[]);
myApp.controller('GreetingController',['$scope',函数($scope){
$scope.DoSomethingElse=函数(事件){
event.target.disabled=true;
};
}]);代码>
xyz
xyz
xyz
var myApp=angular.module('myApp',[]);
myApp.controller('GreetingController',['$scope',',
职能($范围){
$scope.buttons=[{
“名称”:“xyz”,
“禁用”:错误
}, {
“名称”:“xyz”,
“禁用”:错误
}, {
“名称”:“xyz”,
“禁用”:错误
}];
$scope.DoSomethingElse=函数(b){
log(“做某事”);
b、 禁用=真;
}
}
]);代码>
{{button.name}
只需将nd disable指令添加到按钮:
<button ng-click="clicked=true;DoSomethingElse()" ng-disabled-"clicked">xyz</button>
xyz
一个独立于javascript的解决方案。这样,您就不必关心在控制器中设置标志。只需在控制器的init处添加clicked=false
。更好的方法是编写一个自定义指令,使用jqLite或jQuery更新DOM元素(以防加载jQuery库)。检查下面的代码段
不应该在控制器中更新DOM,因为它禁止单元测试,并且应该在指令中进行DOM操作,以证明在这种情况下,按钮是在视图本身中创建的,而不是使用控制器中的数据生成的
angular
.module('演示',[]))
.controller('GreetingController',GreetingController)
.指令(“disableOnClick”,disableOnClick);
GreetingController.$inject=['$scope'];
函数迎宾控制器($scope){
$scope.doSomethingElse=函数(){
log('do other');
}
}
函数disableOnClick(){
var指令={
限制:“A”,
链接:linkFunc
}
返回指令;
函数linkFunc(范围、元素、属性、ngModelCtrl){
元素上('click',函数(事件){
event.target.disabled=true;
});
}
}
xyz
xyz
xyz
您不想在单击每个按钮后禁用它吗?@NicolasGarnil yes。现在是禁用所有按钮。您只需使用ng disabled
这太多的代码,无法仅禁用一个按钮。@Targaryen这就是您否决该按钮的原因?我试图提出一个不处理DOM元素的替代方案。这是working@Targaryen:正如您自己在Rambler的回答中所述,属性需要存储在控制器中。Weedoze就是这样做的——每个按钮一个。别做那个家伙。@Weedoze:array和ng repeat
有点过分了。摆脱它们。@AlvinThompson我用它在点击一个按钮后只禁用一个按钮。如果不使用数组和DOM事件或元素,该如何操作?在这种情况下,按钮将无法在以后再次单击。clicked
变量需要存储在angular中。是的,clicked=false
初始化将在controller.OP中处理它,而不是JavascriptJQuery@Weedoze,我的代码段不使用jQuery。AngularJS内置了一个简化版的jQuery,称为jqLite,使用jqLite的API,我在按钮上映射了一个单击事件来禁用它们