用javascript形成动作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

我有一个表单必须在提交时执行一个javascript函数,然后该函数将数据发布到我的php发送邮件文件并发送邮件。但它只适用于火狐。表单动作似乎没有在IE中做任何事情,我的问题是:这是从表单动作的外部文件调用函数的正确方法:

action="javascript:simpleCart.checkout()"

simpleCart是.js文件,checkout()是函数。

提示表示赞赏,努力理解为什么它会在Firefox中工作,但不是IE浏览器,Chrome浏览器或Safari浏览器。

<form name=form onsubmit="return validateFormOnSubmit(this)" enctype="multipart/form-data" action="javascript:simpleCart.checkout()" method="post">
提问于
用户回答回答于

设置为JavaScript函数的表单操作没有得到广泛支持,我很惊讶它可以在FireFox中使用。

最好的方法是将表单设置action为您的PHP脚本; 如果您在提交之前需要做任何事情,只需添加即可onsubmit

结果你不需要任何额外的功能,只是在这里稍作改动:

function validateFormOnSubmit(theForm) {
    var reason = "";
    reason += validateName(theForm.name);
    reason += validatePhone(theForm.phone);
    reason += validateEmail(theForm.emaile);

    if (reason != "") {
        alert("Some fields need correction:\n" + reason);
    } else {
        simpleCart.checkout();
    }
    return false;
}

然后在你的表格中:

<form action="#" onsubmit="return validateFormOnSubmit(this);">
用户回答回答于

我只是在Firefox,Chrome,Edge和Safari中尝试过这些,他们似乎都能正常工作:

<form action="javascript:alert('Hello there, I am being submitted');">
    <button type=submit>
        Let's do it
    </button>
</form>

显然这是一个选择。另外,我发现它在语义上是合适的,因为它描述了发生了什么:您提交表单,并且不需要浏览器去其他地方,而是调用您的函数。

唯一的理由不这样做的是,你不能用简单的手你的形式在这个关键字作为参数:

<form action="javascript:myFunction(this)">  <!-- doesn't work -->

因此,我的建议是:

<form action="javascript:;" onsubmit="myFunction(this)">

...将按预期工作。它不提交表单,它不需要“返回false”来阻止提交,它不要求你使用JQuery的domready处理表单,这正是它的样子。没有自动化,没有魔法,只需调用myFunction的,让它做休息。

(是的,其他解决方案也可以工作,并且他们没有问题,我只是喜欢这个。)

扫码关注云+社区