1

小さな問題があります。次のような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>

}

このエコーは、一部のコンテンツのいくつかの削除ボタンです。ただし、最初に削除するにはユーザーの確認が必要です。これが重要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";

    }
}

ただし、[キャンセル]または[OK]のどちらを押しても、とにかく削除されます。どうすればこれを修正できますか?

4

4 に答える 4

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?");
}

編集:より目立たない解決策が必要な場合:

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");
            }
        }
    }
}

window.onloadIan の提案に従って、それを にバインドします。

window.onload = bindButtons;

: jQuery を使用している場合、このソリューションはより簡単で洗練されたものになります。

ワーキングjsFiddle

于 2013-03-21T16:02:39.423 に答える
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;
}
于 2013-03-21T16:04:35.363 に答える
1

現在のクリックイベントを停止/削除する必要があります。コードが実行された後、イベントはアンカーにシンクし、クリックをトリガーします。MooTools では、'new Event().stop();' を追加するだけです。jQueryにもこういうのがあると思います。

編集: Hanlet Escaño は正しいです。true を返すことができます (ブラウザーは href 内の URL にリダイレクトします。ブラウザーが何もしないようにする場合は false)。

于 2013-03-21T16:02:42.263 に答える
1

HTML リンクが機能しないようにするには、js 関数または event.preventDefault() で false を返す必要があります。ここで、event はクリック イベント関数に渡される引数です。

a タグ内の要素ではなく、a 要素にクリック イベントを配置するときに、thin を実行しました。しかし、それはうまくいくかもしれません。

于 2013-03-21T16:02:59.787 に答える