event.preventDefault () не работает в angular.js и jquery

0

У меня есть одна проблема. Мое требование - когда пользователь нажмет на якорный тег, появится первое подтверждающее сообщение, и если пользователь нажмет кнопку отмены, страница останется такой, какая есть, если нажать кнопку ОК, она перейдет на другую страницу. Пожалуйста, проверьте мои код ниже.

<li ui-sref-active="active" ><a ui-sref=".profile" class="pop">Profile</a></li>
<li ui-sref-active="active"><a ui-sref=".dept" class="pop" >Department</a></li>
<li ui-sref-active="active"><a ui-sref=".usermanagement" class="pop">User Management</a></li>


$('.pop').click( function(e) {
    if (! confirm('You are about to leave - are you sure')) {
       e.preventDefault();
       //e.stopImmediatePropagation();
       return false;
    } else {
       return true;
    }
  });

route.js:

var Admin=angular.module('Channabasavashwara',['ui.router', '720kb.datepicker','ngMessages','ngCapsLock','ui.bootstrap']);
Admin.config(function($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.otherwise('/');
    $stateProvider
     .state('/', {
            url: '/',
            templateUrl: 'dashboardview/login.html',
            controller: 'loginController'
        })
        .state('dashboard', {
            url: '/dashboard',
            templateUrl: 'dashboardview/dashboard.html',
            controller: 'dashboardController'
        })
        .state('dashboard.profile', {
        url: '/profile',
        templateUrl: 'dashboardview/profile.html',
        controller: 'profileController'
    })
    .state('dashboard.dept', {
        url: '/dept',
        templateUrl: 'dashboardview/dept.html',
        controller: 'deptController'
    })
    .state('dashboard.princpal', {
        url: '/princpal',
        templateUrl: 'dashboardview/princpal.html',
        controller: 'princpalController'
    })
    .state('dashboard.dept_head', {
        url: '/dept_head',
        templateUrl: 'dashboardview/depthead.html',
        controller: 'deptheadController'
    })
    .state('dashboard.usermanagement', {
        url: '/user',
        templateUrl: 'dashboardview/usermangement.html',
        controller: 'managementController'
    })
    .state('dashboard.role', {
        url: '/role',
        templateUrl: 'dashboardview/role.html',
        controller: 'roleController'
    })
    .state('dashboard.editprofile', {
        url: '/editprofile',
        templateUrl: 'dashboardview/editprofile.html',
        controller: 'adminProfileController'
    })
})

Используя приведенный выше код, появляется окно подтверждения, но когда пользователь нажимает кнопку отмены, он также переходит на другую страницу, которая не должна произойти. Пожалуйста, помогите мне.

  • 0
    Переместить e.preventDefault(); за пределами if
  • 0
    @Tushar я переместил это в ранее, если заявление, но проблема та же самая, в то время как я нажимаю кнопку отмены / ок, страница перемещается.
Показать ещё 14 комментариев

2 ответа

1

Во-первых, чтобы использовать jQuery, просто убедитесь, что он загружен перед файлом angular.js. Затем вы можете попробовать следующий образец. Для получения дополнительной информации: "Безопасный" $ применяется в Angular.JS

$scope.safeApply = function (fn) {
    var phase = this.$root.$$phase;
    if (phase === '$apply' || phase === '$digest') {
        if (fn && (typeof (fn) === 'function')) {
            fn();
        }
    } else {
        this.$apply(fn);
    }};

$scope.safeApply(function () {
$('.pop').click( function(e) {
    if (! confirm('You are about to leave - are you sure')) {
       e.preventDefault();
       //e.stopImmediatePropagation();
       return false;
    } else {
       return true;
    }
  });
});
0

Скорее всего, что происходит, так это то, что директива UiSref зарегистрировала событие щелчка, прежде чем вы зарегистрируете свое имя, и сначала оно будет первым. Это происходит внутри функции директивной ссылки.

Событие click запускает обработчик внутри директивы сперва, устанавливает состояние ui-router, а затем, вероятно, ожидает, что цикл дайджеста страницы изменится.

Во время этого $ timeout он запускается в ваше событие click.

Ваше прекращение распространения работает, но это не помогает, потому что мы уже установили новое состояние, и оно вступит в силу в следующем цикле дайджеста, даже если вы приостановили выполнение js с подтверждением подтверждения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню