我有一个我喜欢使用的导航菜单,因为它可以快速轻松地导航:
<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'和'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识别用户点击取消然后导航回来。另外,即使我单击取消,其余的PHP代码也会运行。
答案 0 :(得分:1)
那是因为你实际上需要调用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" />
答案 1 :(得分:1)
正如其他用户所建议的那样,你应该避免使用JS inline或将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函数,而无需使用内联函数或不在循环中重复它。
答案 2 :(得分:0)
<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>