首页 > 解决方案 > 表单始终使用 Javascript 确认提交

问题描述

表单工作了一段时间,但我移动了一些代码并且无法恢复(吸取的教训),现在代码没有像预期的那样工作。简而言之,用户单击删除按钮 > 删除按钮将特定条目 ID 发送到函数,函数获取表单 ID,“确认删除”,然后应该发送到我的 delete_entry.php 代码。现在,即使我点击“否”,表单总是在提交,并且我添加了一个警报来告诉我它去哪条路线。

我试过注释掉表单,它仍然提交,所以我不认为它与确认功能明确相关(虽然可能很疯狂)

if ($entry['SubEntryID'] == "0") { ?>
<div id="post"><!-- This is the main post-->
    <div id="main">
        <div id="title">
            <?php echo $entry['EntryID']; ?>
            <?php echo $entry['Title']; ?>
        </div><br />
        <p><?php echo $entry['Body']; ?></p><br />
        <div id="postinfo">
          At: <?php echo $entry['CreateDate']; ?><br/>
          Posted by - <?php echo $entry['UserName']; ?>
        </div>
<!-- Start the form for the delete button -->
<form action="Delete_entry.php" method="post" id="Delete<?php echo $entry['EntryID'];?>">    
<input type="hidden" readonly="true" name="EntryID" value="<?php echo $entry['EntryID']; ?>" />
<input type="hidden" readonly="true" name="UserID" value="<?php echo $entry['UserID']; ?>" />
<?php if ($userid == 1 || $userid == $entry['UserID']) { ?>
    <input onclick="confirmdelete('Delete<?php echo $entry['EntryID'];?>')" type="image" src="redx.png" alt="Delete Post" id="btnDelete" value="Delete Post"/>
<?php } ?><br />
        </form>
</div>
function confirmdelete(eid) {

    var retval = confirm("Are you sure you want to delete?" + eid + "?");

    if (retval == true) {
        alert("You said Yes");
        document.getElementById(eid).submit();
        }
    else
    {
        alert("You said No");
    }
}

我希望删除按钮调用该函数,如果它是真的,该函数通过提交表单来响应,如果是假的则取消表单提交。只有在确认为真时才应调用表单页面,然后提交()

标签: javascriptphpsql

解决方案


首先,confirmdelete() 没有返回任何真/假,因此没有代码可以阻止表单提交。其次,即使函数返回 false,表单也会提交,因为您有 2 次提交(表单和 onclick)。

将函数调用移至表单的 onsubmit()。去掉onclick,因为输入类型图片默认提交表单。这是代码:

形式:

<form action="Delete_entry.php" method="post" 
   id="Delete<?php echo $entry['EntryID'];?>" 
   onsubmit="return confirmdelete(<?php echo $entry['EntryID'];?>)"> 

然后按钮(onclick删除):

<input type="image" src="redx.png" alt="Delete Post" id="btnDelete" value="Delete Post" />

最后是 JavaScript(返回真/假):

function confirmdelete(eid) {

    if (confirm("Are you sure you want to delete?" + eid + "?")) {
        alert("You said Yes");
        return true;
    }
    else
    {
        alert("You said No");
        return false;
    }
}

推荐阅读