我有一个导航菜单,我喜欢使用它,因为它使导航快速而简单:
<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>