1

这是代码:

<form  method="post" id="cp_ind_form">

    // lots of input fields!
    <input type="submit" name="update_submit" value="Update"  />
    <input type="submit" name="delete_submit" value="Delete"  onclick="deleteConfirm()" />

</form>

scripts.js(确认此文件已连接到上面的页面)

(function deleteConfirm() {
    var s = document.getElementById('confirm');
    s.onchange = function() {
        var yes = confirm('Do you really want to delete this location?');
        if (yes) { 
            var f = document.getElementById('cp_ind_form');
            f.submit();
        }
    }
})();

}

这让我发疯。这样的基本功能在这里不起作用?我基本上是从我拥有的其他代码中复制它,这没有什么不同。有人可以确认我是否遗漏了一个小细节吗?

4

3 回答 3

5

看代码。

当您单击提交时,您正在向某事添加 onchange 事件。

您没有触发显示确认,也没有取消原始提交。

而且用 (funciton(){})(); 包裹它是没有意义的

它应该是

function deleteConfirm() {
    return confirm('Do you really want to delete this location?');   
}

onclick="return deleteConfirm();"
于 2013-01-25T16:36:16.767 回答
2

要在调用时实际执行确认deleteConfirm,请将您的代码更改为:

function deleteConfirm() {
    var yes = confirm('Do you really want to delete this location?');
    if (yes) { 
        document.getElementById('cp_ind_form').submit();
    }
    // block default submit
    return(false);
}

这也会返回 false ,这样就不会发生默认的表单提交。

然后,将您的 HTML 更改为:

onsubmit="return deleteConfirm()"

如果您处理 onsubmit 而不是 onclick,则可以通过从处理程序返回 false 来阻止默认提交。

于 2013-01-25T16:38:05.080 回答
1

deleteConfirm()在按钮单击时运行。在此函数中,您将代码分配给onchange等待#confirm更改项目的事件。我不知道那个元素在哪里,但我认为该事件永远不会被触发,所以确认框永远不会显示

于 2013-01-25T16:36:46.107 回答