Javascript确认&循环回声

时间:2013-03-21 15:58:42

标签: php javascript while-loop confirm

我有一个小问题,我使用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";

    }
}

但是,无论你按取消还是确定,它都会删除它。我该如何解决这个问题?

4 个答案:

答案 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,这个解决方案会更简单,更优雅。

Working jsFiddle

答案 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标记内的元素上时,我确实很瘦。但它可能会奏效。