echoed HTML Form没有调用onsubmit函数

Echoed HTML Form does not call the onsubmit function

我的 onsubmit 有问题:

echo "<form method='post' action='' onsubmit='return confirm(\"do you want to delete \" + {$array[0][1]} + \" \" +{$array[0][3]});'>
<input type='submit' name='delete' value='Delete'>
</form>";

如果我按下提交按钮,确认对话框不会打开。表单被提交,我的东西被删除。我也尝试将 js 放在外部文件中,但这也不起作用。

这是来自外部文件的代码:

function submitDeleteForm(prename, name) {
    confirm("Do you want to delete " + prename + " " + name + " ?")
}

我刚刚在 onsubmit 中使用了 return submitDeleteForm。

已呈现 HTML:

<form method="post" action="apprentice" onsubmit="return confirm("Do you want to delete " + name+ " " +lastname);">
                            <input type="submit" name="delete" value="Delete">      
                          </form>

在尝试使用外部文件时,HTML 中有文件,这意味着它不会在导入脚本时失败。

希望有人能帮助我。 感谢您的回答。

你确定那是渲染的 html?在编辑您的 post 之前,我确定那是您的问题所在,根据我的经验,由于无法转义字符串(例如双引号)而导致 js 处理程序的参数写入中断,因为它正在服务器中呈现php.

解决方案:将您的字符串数据编码为 base64 以安全地使用转义字符对字符串进行编码。


    $encodedString = base64_encode("do you want to delete $array[0][1] $array[0][1]?");
    onsubmit='return confirm($encodedString)'

根据有关 base64 字符串的文档:此编码旨在使二进制数据在通过非 8 位干净的传输层(例如邮件正文)传输时仍然存在。

参考: http://php.net/manual/en/function.base64-encode.php

你在 confirm() 中插入双引号时犯了一些错误。以下代码可能对您有用。

   echo "<form method='post' action='' onsubmit='return confirm(\"do you want to delete {$array[0][1]}  {$array[0][3]}\");'>
    <input type='submit' name='delete' value='Delete'>
    </form>";

现在让我告诉你你到底哪里做错了。 让我们考虑

$array[0][1] = "Vijay1"
$array[0][3] = "Vijay3"

仅供参考。对于此输入,您的代码将生成以下 HTML 代码(呈现):

其中vijay1和vijay3将成为JavaScript的字符串变量,而不是常量字符串。这种情况就像您使用的 JavaScript 字符串变量从未在您的 JavaScript 代码中定义过。