我有一个小问题,我使用PHP while循环创建了一个删除按钮,如下所示:
while($something = mysql_fetch_array($sql_something)){
$id = $something['id']
echo '<a href="somewhere.php?id='.$id.'"><button onclick="delconfirm()">Delete</button></a>
}
这个echo是一些内容的删除按钮。但是我首先需要用户确认删除,这是onclick="delconfirm()"
进来的地方。
我的确认看起来像这样:
function delconfirm()
{
var r=confirm("Are you sure you want to delete this content?");
if (r==true){
// ...do nothing i guess? it needs to redirect using the PHP echo'd link...
}
else{
window.location = "edit.php";
}
}
但是,无论你按取消还是确定,它都会删除它。我该如何解决这个问题?
答案 0 :(得分:6)
将其更改为:
while($something = mysql_fetch_array($sql_something)){
$id = $something['id']
echo '<a href="somewhere.php?id='.$id.'"><button onclick="return delconfirm();">Delete</button></a>
}
然后你的功能:
function delconfirm()
{
return confirm("Are you sure you want to delete this content?");
}
编辑:如果您想要更多 unobtrusive 解决方案:
while($something = mysql_fetch_array($sql_something)){
$id = $something['id']
echo '<input type="button" value="Delete" data-id="$id" />';
}
然后一些javascript绑定事件:
function bindButtons() {
var buttons = document.getElementsByTagName("input");
for (var i = 0; i < buttons.length; i++) {
if (buttons[i].type == "button") {
buttons[i].onclick = function () {
location.href='somewhere.php?id=' + this.getAttribute("data-id");
}
}
}
}
并根据Ian建议将其绑定到window.onload
:
window.onload = bindButtons;
注意:如果你使用的是jQuery,这个解决方案会更简单,更优雅。
答案 1 :(得分:2)
如果用户按下取消,则需要停止事件执行通常的操作。试试这个,例如:
function delconfirm(e) {
e = e || window.event;
if (!confirm("Are you sure you want to delete this content?")) {
e.preventDefault();
// This will prevent the event from bubbling up to the <a>.
e.stopPropagation();
return false; // For the ancient/crappy browsers still out there.
}
return true;
}
答案 2 :(得分:1)
您需要停止/删除当前的点击事件。执行代码后,事件会下沉到锚点并触发单击。使用MooTools只需添加'new Event()。stop();'。我认为jQuery也有这样的东西。
编辑:HanletEscaño是对的。您可以返回true(浏览器将重定向到href中的URL,或者false以使浏览器不执行任何操作)答案 3 :(得分:1)
为了防止HTML链接起作用,你必须在你的js函数或event.preventDefault()中返回false,其中event是一个传递给click事件函数的参数
在将a click事件放在a元素上而不是在a标记内的元素上时,我确实很瘦。但它可能会奏效。