javascript - Confirmar cuadro de diálogo en el botón Eliminar
html5 angularjs (7)
Estoy trabajando con una aplicación usando Angular.
Actualmente tengo un botón de eliminación, que tiene una confirmación adjunta a onClick()
<a class="delete button" href="#" onClick="return confirm(''Are you absolutely sure you want to delete?'')" ng-click="remove_user(user, $event)" ></a>
El problema es que cuando aparece la confirmación, tanto "Aceptar" como "Cancelar" eliminan el elemento, ¿qué me falta para que "Cancelar" se cancele simplemente?
Bueno, yo crearía una función que marque una variable global y la verifique al enviar
<form onsubmit=''check_delete()''
<input type=''submit'' onclick=''set_delete()''
Javascript
function set_delete(){delete_flag = 1 ;} // this is a global var set by default to 0
function check_delete(){if(delete_flag == 1) confirm(''''sure?);}
Esto es un poco tarde, pero para el futuro lector, como yo hace 15 minutos:
La " vía angular " será crear una directiva como se sugiere aquí :
''use strict'';
angular.module(''confirm'', [])
.directive(''confirm'', [function () {
return {
priority: 100,
restrict: ''A'',
link: {
pre: function (scope, element, attrs) {
var msg = attrs.confirm || "Are you sure?";
element.bind(''click'', function (event) {
if (!confirm(msg)) {
event.stopImmediatePropagation();
event.preventDefault;
}
});
}
}
};
}]);
Uso:
<button ng-click="save()" confirm="Save Changes?">Save</button>
Podría ayudar a otros
La muestra de código HTML
<button confirmed-click="removeRowIndex(col, row)"
ng-confirm-box-click="Are you sure want to delete?"
class="btn btn-xs btn-default"/>
La muestra de código de AngularJs
app.directive(''ngConfirmBoxClick'', [
function () {
return {
link: function (scope, element, attr) {
var msg = attr.ngConfirmBoxClick;
var clickAction = attr.confirmedClick;
element.bind(''click'', function (event) {
if (window.confirm(msg)) {
scope.$eval(clickAction)
}
});
}
};
}
]);
Si está utilizando bootstrap para la interfaz de usuario , le recomiendo usar el angular-dialog-service . Una vez que incluyas las dependencias del módulo, puedes confirmarlo de esta manera.
function FooController($scope, $dialogs)
{
$scope.removeUser = function() {
var dlg = dialogs.confirm(''Please Confirm'', ''Are you absolutely sure you want to delete?'');
dlg.result.then(function () {
console.log("User has confirmed");//do something when user confirms
},function(){
console.log("User has cancelled");//do something when user cancels. Can omit the 2nd function if no handling is required
});
}
}
Vea este ejemplo para más detalles.
Simplemente reemplace los métodos onclick como a continuación y funcionará.
onclick="javascript:return confirm(''Are you absolutely sure you want to delete?'')"
Tal vez solo usando el controlador de clic angular y haciendo la lógica de confirmación vale la pena intentarlo.
function FooController($scope, $window) {
$scope.removeUser = function() {
var deleteUser = $window.confirm(''Are you absolutely sure you want to delete?'');
if (deleteUser) {
$window.alert(''Going to delete the user'');
}
}
}
function FooController($scope, $window) {
$scope.removeUser = function() {
var deleteUser = $window.confirm(''Are you absolutely sure you want to delete?'');
if (deleteUser) {
$window.alert(''Going to delete the user'');
}
}
}
body {
padding: 0;
margin: 0;
background: #3FA8C6;
background-image: -moz-linear-gradient(top, #3fa8c6 0%, #3fa8c6 0%, #399ab2 100%);
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #3fa8c6), color-stop(0%, #3fa8c6), color-stop(100%, #399ab2));
background-image: -webkit-linear-gradient(top, #3fa8c6 0%, #3fa8c6 0%, #399ab2 100%);
background-image: -o-linear-gradient(top, #3fa8c6 0%, #3fa8c6 0%, #399ab2 100%);
background-image: -ms-linear-gradient(top, #3fa8c6 0%, #3fa8c6 0%, #399ab2 100%);
background-image: linear-gradient(to bottom, #3fa8c6 0%, #3fa8c6 0%, #399ab2 100%);
color: #fff;
font-family: ''Doppio One'', sans-serif;
text-shadow: 0 1px 0 rgba(0, 0, 0, .3);
line-height: 1.5;
-webkit-font-smoothing: antialiased;
}
.wrapper {
width: 50%;
margin: 0 auto;
}
h1,
h2,
h3,
h4,
h5,
h6 {
letter-spacing: -0.03em;
font-size: 2em;
}
a {
border-bottom: 1px solid #fff;
border-bottom: 1px solid rgba(255, 255, 255, 0.7);
padding-bottom: 0.15em;
position: relative;
color: white;
text-decoration: none;
}
a:after {
content: '''';
position: absolute;
height: 1px;
left: 0;
right: 0;
bottom: -2px;
background: rgba(0, 0, 0, .1);
}
a:hover {
color: #C0E3EC;
}
h1 {
margin: 0.667em 0 0;
padding-left: 0.5em;
text-align: left;
}
h2 {
font-size: 1.5em;
}
small {
margin-top: 1em;
display: block;
font-style: italic;
font-size: 0.667em;
}
p em {
font-style: none;
}
#welcome {
position: relative;
overflow: hidden;
padding-bottom: 1em;
padding-left: 20px;
}
#welcome > div {
padding-top: 1px;
}
#dave {
float: left;
margin-top: 3em
}
#welcome > h2 {
margin-top: 0.5em;
padding-left: 0.5em;
margin-bottom: 0;
}
.bubble p {
line-height: 22px;
}
.bubble {
background: rgba(255, 255, 255, 0.1);
border-color: rgba(255, 255, 255, 0.1);
padding: 0.667em 1em;
position: relative;
}
.bubble:after {
content: "";
position: absolute;
width: 0;
height: 0;
border-top: 20px solid transparent;
border-bottom: 20px solid transparent;
border-right: 20px solid white;
border-right-color: inherit;
top: 50px;
left: -20px;
}
#features {
margin: 0.444em 0 0;
clear: both;
}
#features > h2 {
margin: 0;
}
#features ol {
position: relative;
padding: 1em 0 1.5em;
background: rgba(0, 0, 0, .1);
border-color: rgba(0, 0, 0, .1);
margin: 0;
overflow: hidden;
list-style: none;
counter-reset: item;
}
#features li {
width: 30%;
padding: 0 1.5%;
float: left;
text-align: center;
margin-bottom: 1em;
}
#features li h2 {
display: block;
padding: 1em;
margin: 0.667em auto 1em;
font-size: 1em;
line-height: 1em;
text-align: center;
background: rgba(0, 0, 0, .1);
border-radius: 2em;
box-shadow: inset 0 0 1em rgba(0, 0, 0, .1), 0 2px 2px rgba(255, 255, 255, .1);
}
#next > div {
width: 45%;
float: left;
padding: 0 2.5%;
}
img {
z-index: 1;
-webkit-transition: -webkit-transform 2s ease-in-out;
-moz-transition: -moz-transform 2s ease-in-out;
-o-transition: -o-transform 2s ease-in-out;
-ms-transition: -ms-transform 2s ease-in-out;
transition: transform 2s ease-in-out;
position: relative;
}
img:active {
-webkit-transform: rotate(1440deg) scale(1.2);
-moz-transform: rotate(1440deg) scale(1.2);
-o-transform: rotate(1440deg) scale(1.2);
-ms-transform: rotate(1440deg) scale(1.2);
transform: rotate(1440deg) scale(1.2);
}
@media screen and (max-width: 1200px) {
.wrapper {
width: 80%;
}
}
@media screen and (max-width: 768px) {
.wrapper {
width: auto;
margin: 0;
}
#welcome {
margin-right: 2.5%;
}
}
@media screen and (max-width: 500px) {
.wrapper {
text-align: center;
}
#dave {
float: none;
}
#welcome {
padding: 0 1.5em;
margin: 0;
}
h1 {
text-align: center;
margin-bottom: 0;
padding-left: 0;
font-size: 1.8em;
}
#welcome > h2 {
margin-bottom: 0.667em;
}
.bubble {
text-align: center;
}
.bubble:after {
display: none;
}
#features li {
width: 47%;
}
#features li:last-child {
float: none;
clear: both;
margin: 0 auto;
}
#next > div {
float none;
width: auto;
}
}
<html ng-app ng-controller="FooController">
<body>
<a class="delete button" href="#" ng-click="removeUser(user, $event)">Delete</a>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
</body>
</html>
<a class="delete button" href="#" onClick="return false" ng-click="if(confirm(''Are you absolutely sure you want to delete?'')){remove_user(user, $event);}" ></a>
¿Prueba esto? Creo que tiene que ver con el hecho de que se está deteniendo la escucha predeterminada "onclick" pero que no afecta a la escucha "ng-click". En lugar de eso, moví la lógica de confirmación al escucha "ng-click" y "retornar falso" en el clic porque no quieres que el enlace te aleje.