Как перенаправить страницу после нажатия на кнопку Ok на sweet alert?

Я могу отображать sweet alert После обновления страницы, но я должен нажать кнопку Ok, которую я получаю на sweet alert для перенаправления страницы.Пожалуйста, помоги мне в этом.

<?php
    echo '<script type="text/javascript">';
    echo 'setTimeout(function () { swal("WOW!","Message!","success");';
    echo '}, 1000);'
    echo 'window.location.href = "index.php";';
    echo '</script>';
?>

9 ответов


, чтобы указать функцию обратного вызова, вы должны использовать объект в качестве первого аргумента, и функцию обратного вызова в качестве второго аргумента.

echo '<script>
    setTimeout(function() {
        swal({
            title: "Wow!",
            text: "Message!",
            type: "success"
        }, function() {
            window.location = "redirectURL";
        });
    }, 1000);
</script>';

просто поставить .then( перед функцией. Мы!--7-->не нужно использовать функции таймера. Например:

swal({
    title: "Wow!",
    text: "Message!",
    type: "success"
}).then(function() {
    window.location = "redirectURL";
});

на .then функция используется для ожидания, пока пользователь не прочитает информацию модального окна и решить, какое решение сделать, нажав на одну кнопку. Например, Yes или No.

после щелчка Swich Alert может перенаправить пользователя на другой экран, вызвать другое модальное окно Sweet Alert с новыми и последующими вопрос, перейдите по внешней ссылке и т. д.

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

С использованием .then, код становится короче, чистым и элегантным. ;)


setTimeout(function () { 
swal({
  title: "Wow!",
  text: "Message!",
  type: "success",
  confirmButtonText: "OK"
},
function(isConfirm){
  if (isConfirm) {
    window.location.href = "//stackoverflow.com";
  }
}); }, 1000);
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert-dev.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.css">

или вы можете использовать встроенные функции timer, то есть:

swal({
  title: "Success!",
  text: "Redirecting in 2 seconds.",
  type: "success",
  timer: 2000,
  showConfirmButton: false
}, function(){
      window.location.href = "//stackoverflow.com";
});
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert-dev.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/sweetalert/1.1.3/sweetalert.css">

Я не смог сделать это с любой функцией обратного вызова swal(sweatAlert) по умолчанию, поэтому я заставил jquery, получил класс кнопки Ok, проверяющий элемент в chrome, и сделал что-то вроде этого:

<script>    
          sweetAlert({
                title:'Warning!',
                text: 'Invalid user or password!',
                type:'warning'
          },function(isConfirm){
                alert('ok');
          });
          $('.swal2-confirm').click(function(){
                window.location.href = 'index.php';
          });
</script>

предупреждение " Ok " в функции(isConfirm) было просто тестом, чтобы увидеть, попадет ли он в эту функцию, если да, я должен быть в состоянии перенаправить оттуда, но я не был...

поэтому я использовал jQuery, чтобы определить, была ли нажата кнопка "OK" swal, получив ее класс: ".swal2-confirm", то я мог бы перенаправить с успехом...

надеюсь, это поможет вам всем !

PS: я использую php echo для запуска скрипта, мне не нужно оставлять php для его запуска, просто используйте одинарные кавычки, и все готово !


самое лучшее и простое решение, мы можем добавить больше событий, как хорошо!

swal({ title: "WOW!",
 text: "Message!",
 type: "success"}).then(okay => {
   if (okay) {
    window.location.href = "URL";
  }
});

Я думаю, это поможет. То же, что и Мистер Бармер. Но я вложил это в теги php.

вот оно....

    <?php if(!empty($_GET['submitted'])):?>
        <script>
        setTimeout(function() {
            swal({
                title: "Congratulaions!",
                text: "Signed up successfully, now verify your mail",
                type: "success",
                confirmButtonText: "Ok"
            }, function() {
                window.location = "index.php";
            }, 1000);
        });
        </script>   
    <?php endif;?>

ни одно из вышеперечисленных решений не работало для меня, я должен был использовать .тогда

swal({
  title: 'Success!',
  text: message,
  type: 'success',
  confirmButtonText: 'OK'
}).then(() => {
  console.log('triggered redirect here');
});

function confirmDetete(ctl, event) {

    debugger;
    event.preventDefault();
    var defaultAction = $(ctl).prop("href");
    swal({
        title: "Are you sure?",
        text: "You will  be able to add it back again!",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Yes, delete it!",
        cancelButtonText: "Cancel",
        closeOnConfirm: false,
        closeOnCancel: false
    },
        function (isConfirm) {
            if (isConfirm) {
                $.get(ctl);
                swal({
                    title: "success",
                    text: "Deleted",
                    confirmButtonText: "ok",
                    allowOutsideClick: "true"
                }, function () { window.location.href = ctl })

     // $("#signupform").submit();
            } else {
                swal("Cancelled", "Is safe :)", "success");

            }
        });
}

существующие ответы не работает для меня, я просто использовать $('.confirm').hide(). и это сработало для меня.

success: function(res) {
$('.confirm').hide()
swal("Deleted!", "Successfully deleted", "success")
setTimeout(function(){
window.location = res.redirect_url;
},700);