无需点击php即可确认记录删除


Confirm record deletion without a click php

我有一个导航菜单,我喜欢使用它,因为它使导航快速而简单:

<form action="../">
<select onchange="window.open(this.options[this.selectedIndex].value,'_top')">
<option value="" selected="selected">Navigate</option>
<option value="view_record.php?file_id=<? echo $row['file_id']; ?>">View</option>
<option value="delete_record.php?file_id=<? echo $row['file_id']; ?>" >Delete</option>
</select>
</form>

两个onchange导航都访问了各自的.php页面,没有问题。

但要删除一条记录,事实上,一旦用户在导航菜单上点击该选项,他们就会被吐司,尤其是如果他们无意中选择了它。

我尝试了几种方法来以某种方式修改onclick javascript:

echo "<td><a onClick='"javascript: return confirm('Please confirm deletion');'" href='delete.php?id=".$query2['id']."'>DELETE</a></td><tr>";

如果你点击"删除",它会起作用,但在我的导航菜单中,它是一个onchange事件。

我试过这个:

<form action="../">
<select onchange="window.open(this.options[this.selectedIndex].value,'_top')">
 <option value="" selected="selected">Navigate</option>
<option value="view_record.php?file_id=<? echo $row['file_id']; ?>">View</option>

</select>
</form>
<form action="../">
<select onchange="javascript: return confirm('Please confirm deletion');">
<option value="" selected="selected">Navigate</option>
<option value="delete_f.php?file_id=<? echo $row['file_id']; ?>" >Delete Case </option>
 </select>
 </form>

但所做的只是将两个菜单叠加在一起。

我一直在寻找一种方法,使用某种条件语句来根据链接更改onchange事件,但链接位于"select onchange"命令下方,这意味着它会首先被读取。

我试图将代码添加到等待的php页面中,以弹出一个确认删除警报框,但我最终得到的只是一个带有"OK"的框,而不是"OK"answers"Cancel"的框。

编辑

我尝试将其添加到php页面:

echo '<script language="JavaScript" type="text/javascript">';
echo 'var checK = confirm("Are you sure to delete?")';
echo 'if (!checK)';
echo '{';
echo 'history.go(-1); ';
echo '}';
echo '</script>';

但是什么也没发生

我试过这个:

echo '<script language="javascript">';
echo 'confirm("message successfully sent")';
echo '</script>';

但当我单击"取消"时,将无法返回到上一页。我不知道如何让php识别用户点击取消然后导航回来。另外,即使我单击Cancel,php代码的其余部分也会运行。

这是因为您实际上需要调用JavaScript函数。正如我们所有人所希望的那样,Javascript(以及任何其他语言)对触发器起作用。试试下面这样的东西。

<script type="text/javascript">
function ConfirmDelete()
{
var IsOkToDelete = Confirm("Are you sure you want to delete this record?");
if (IsOkToDelete) { // not sure how you're doing the delete but it happens here
// Once you delete it you can use window.location.href = 'http://mywebsite.com/records' or something url there --- EDIT: actually you can use window.history.back() as well if you want to go back one page programatically.
} 
// else the function falls through and no navigation/deletion happens happens.
}
</script>

然后你实际上这样调用脚本:

<input type="button" onclick="ConfirmDelete()" value="Go" />

正如其他用户所建议的那样,您应该避免使用JS内联或将PHP与javascript混合使用。您在上面尝试的代码应该是这样的。

您的表单代码

<form action="../">
<select onchange="redirectFunc(this.value,'<? echo $row['file_id']; ?>')">
<option value="" selected="selected">Navigate</option>
<option value="view">View</option>
<option value="delete" >Delete</option>
</select>
</form>

然后你的脚本

<script>
function redirectFunc(action,id){
    if(action!=""){
    if(action=='view'){
        var url='view_record.php?file_id='+id;
        window.open(url,'_top')
    }else{
        var conf=confirm('Are you sure to delete this record');
        if(conf){
            var url='delete_record.php?file_id='+id;
            location.href=url;
        }
    }
    }
}
</script>

通过这种方式,您可以动态地使用JS函数,而无需内联使用或在循环中重复使用。

<form action="../">
  <select onchange="decideWhatToDo(this.value, this.selectedIndex, this)">
    <option value="" selected="selected">Navigate</option>
    <option value="view_record.php?file_id=<? echo $row['file_id']; ?>">View</option>
    <option value="delete_record.php?file_id=<? echo $row['file_id']; ?>" >Delete</option>
  </select>
</form>
<script>
function decideWhatToDo(value, index, elem){
var txt = elem.options[index].text
if(txt == 'Delete'){
    if(confirm('Please confirm deletion')){
      // do where to go
   }
  return false;
}
}else{
    //........
//window.open(value,'_top')
}
</script>