【问题标题】:Delete confirmation HREF Sweet Alert删除确认 HREF Sweet Alert
【发布时间】:2019-09-18 05:19:45
【问题描述】:

A possible duplicate of this link

但我似乎无法用该论坛的相同逻辑解决这个问题。

我正在开发一个预订模块,它具有确认取消预订的功能。这是我的PHP 代码,它告诉您预订是否已确认、取消或尚未确认。 Status==0(尚未确认)- 默认一个,Status==1(已确认)和Status==2(已取消)

<?php
session_start();
error_reporting(0);
include('includes/config.php');
if(strlen($_SESSION['alogin'])==0)
    {   
header('location:index.php');
}
else{
if(isset($_REQUEST['eid']))
    {
$eid=intval($_GET['eid']);
$status="2";
$sql = "UPDATE tblbooking SET Status=:status WHERE  id=:eid";
$query = $dbh->prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query-> bindParam(':eid',$eid, PDO::PARAM_STR);
$query -> execute();

$msg="Booking Successfully Cancelled";
}

if(isset($_REQUEST['aeid']))
    {
$aeid=intval($_GET['aeid']);
$status=1;

$sql = "UPDATE tblbooking SET Status=:status WHERE  id=:aeid";
$query = $dbh->prepare($sql);
$query -> bindParam(':status',$status, PDO::PARAM_STR);
$query-> bindParam(':aeid',$aeid, PDO::PARAM_STR);
$query -> execute();

$msg="Booking Successfully Confirmed";
}

<?php $sql = "SELECT tblbooking.Status";
$query = $dbh -> prepare($sql);
$query->execute();
$results=$query->fetchAll(PDO::FETCH_OBJ);
$cnt=1;
if($query->rowCount() > 0){
  foreach($results as $result){
?>
if($result->Status==0){
echo htmlentities('Not Confirmed yet');
} else if ($result->Status==1) {
echo htmlentities('Confirmed');
}
else{
echo htmlentities('Cancelled');
}

这是使用基本Javascript 警报确认/取消预订的原始代码

<td><button class="btn btn-sm btn-primary"><a href="manage-bookings.php?aeid=<?php echo htmlentities($result->id);?>" onclick="return confirm('Do you really want to Confirm this booking')"> <i style="color: #fff;" class='fa fa-check'></i></a></button>

<button class="btn btn-sm btn-danger"><a href="manage-bookings.php?eid=<?php echo htmlentities($result->id);?>" onclick="return confirm('Do you really want to Cancel this booking')"> <i style="color: #fff;" class='fa fa-close'></i></a></button></td>

但我想使用 sweetalert,所以我将它修改为这个(首先只用锚测试它)

<a href="manage-bookings.php?aeid=<?php echo htmlentities($result->id);?>" onclick="confirmation(event)">Confirm</a>

这是script

<script>
    function confirmation(ev) {
ev.preventDefault();
var urlToRedirect = ev.currentTarget.getAttribute('href'); //use currentTarget because the click may be on the nested i tag and not a tag causing the href to be empty
console.log(urlToRedirect); // verify if this is the right URL
swal({
  title: "Are you sure you want to tag this booking as confirmed",
  text: "You will not be able to revert this!",
  icon: "warning",
  buttons: true,
  dangerMode: true,
})
.then((willDelete) => {
  // redirect with javascript here as per your logic after showing the alert using the urlToRedirect value
  if (willDelete) {
    swal("Your booking as been confirmed!", {
      icon: "success",
    });
  } else {
    swal("You booking hasn't been confirmed.");
  }
});
}
</script>

问题是,警报有效。它创建一个弹出确认,但它根本不确认/取消预订,尽管href 链接与原始链接说同样的话,但原始链接重新加载页面并且标记工作。

【问题讨论】:

  • 除了通知之外,我没有看到您对选择进行任何操作的部分
  • 您是否按照评论中的说明重定向到urlToRedirect
  • 谢谢!我完全错过了,它现在可以工作了:)

标签: javascript php sweetalert


【解决方案1】:

在我看来,您实际上从未将任何数据发送回服务器。

内置的 javascript 确认对话框会中断您的超链接,然后在您点击 OK 后允许它恢复。

Sweetalerts 似乎不这样做。因此,您永远不会重定向到您需要访问的页面。您可以使用 javascript 重定向到正确的 URL,或者您可以为您尝试执行的操作编写服务器端 API,并在“willDelete”案例中从 AJAX 调用该 API。

这是前一个选项:

<script>
    function confirmation(ev) {
        ev.preventDefault();
        var urlToRedirect = ev.currentTarget.getAttribute('href'); //use currentTarget because the click may be on the nested i tag and not a tag causing the href to be empty
        console.log(urlToRedirect); // verify if this is the right URL
        swal({
            title: "Are you sure you want to tag this booking as confirmed",
            text: "You will not be able to revert this!",
            icon: "warning",
            buttons: true,
            dangerMode: true,
        })
        .then((willDelete) => {
            if (willDelete) {
                // redirect with javascript here as per your logic after showing the alert using the urlToRedirect value
                window.location.href = urlToRedirect;
            } else {
                swal("You booking hasn't been confirmed.");
            }
        });
    }
</script>

【讨论】:

  • 还有可能是 ev.currentTarget.getAttribute('href');应该是 ev.target.offsetParent.children[0].href;
  • 谢谢!有效!即使ev.currentTarget.getAttribute('href');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多