无法使用Javascript提交表单

无法使用Javascript提交表单,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我正在尝试使用javascript和ajax提交名为“vform”的表单 名为“show”的按钮用于显示包含名为vform的表单的“div”,该表单调用codevalidate函数,并在那里使用一些ajax代码提交表单。我得到的错误是vform.submit()。这是html和js代码(我知道错误处于if状态,但不知道在哪里) html: <button id="show" onClick="javascript:codefield(); return false";>Apply f

我正在尝试使用javascript和ajax提交名为“vform”的表单 名为“show”的按钮用于显示包含名为vform的表单的“div”,该表单调用codevalidate函数,并在那里使用一些ajax代码提交表单。我得到的错误是vform.submit()。这是html和js代码(我知道错误处于if状态,但不知道在哪里)

html:

<button id="show" onClick="javascript:codefield(); return false";>Apply for Discount</button>
            <div id="apply" style="display:none">Voucher code<br>
            <form id="vform" name="vform" action="" method="post" onsubmit="javascript:codevalidate(); return false;" >
            <input type="text" name="code" id="code"><br>
            <span id="error" style="color:red"></span><br>
            <input type="submit" name="btn" value="apply" id="btn" ></form>
            </div>
function codevalidate()
{

if(document.getElementById('code').value!=="")
{
$.post("couponajax.php",{code:$("#code").val()},
    function(data)
    {   
        if(data=='1')
        {
            //alert("success");
            vform.submit();
            return true;
        }
        else 
        {
            document.getElementById('error').innerHTML="You have entered a wrong code!";
            return false;
        }

    });

}
else
{
document.getElementById('error').innerHTML="Code can't be empty!";
return false;
}

return false;
}

codefield函数只是显示onclick事件上的div,ajax调用只是检查数据库中是否存在代码。if exists返回1,否则返回0。 问题是显示警报消息,但未提交表单。如何解决此问题?

您应该使用:

document.getElementById("vform").submit();
更新:


尝试从onsubmit属性中删除“return false;”,并从if条件中删除“vform.submit();”。

您没有选择表单

尝试改变

vform.submit();
致:


请试试这个,对我有用

document.getElementById("vform").submit();

我认为您缺少jquery选择器

试着替换

vform.submit(); 或者您可以调用submit按钮单击事件,如

$("#btn").click();
试试这个

document.forms["vform"].submit();

希望这有帮助。

您不必提交带有代码的表单

只需调用验证函数并使用preventDefault函数控制提交流

var codevalidate = function(e) {
    if (!validationCode) { // if validation code didn't pass
        e.preventDefault(); // prevent form from submitting
    }
}
// register callback that will be called when user submits form
document.getElementById("vform").addEventListener('onsubmit', codevalidate);
这样,只有通过验证,用户才能提交表单

还可以通过调用
console.log(data)检查您的
data
是否实际返回“1”

如果操作为空,表单将提交到当前地址,可以吗?

问题是:


表单
元素的
操作
属性为空。因此,它被提交到调用
.submit()
方法的同一页面


因此,您应该首先指定
action
属性,如:

<form id="vform" name="vform" action="vfrom_submit.php" method="post" 
  onsubmit="javascript:codevalidate(); return false;" >
        .....
</form>
致:


希望有帮助,干杯:)

它应该是
document.getElementById(“vform”).submit()
我已经尝试过了,但是它还没有工作。(如果我在if条件之外使用vform.submit(),那么它就工作了。)你能
记录
警报
请求
返回的
数据吗?是的警报消息(成功)正在工作。
表单的
动作
属性为空。为什么呢?这可能是一个原因。顺便说一句,您在哪个
浏览器上测试代码?对我来说,vform.submit也在工作,但不在if条件下。我使用了if(isset($_POST['btn']){echo“form submitted”}..感谢您的时间:)我在同一页上使用了POST值..所以是的,没问题。是的,数据实际上返回1。问题是form.submit();如果我在if条件之外使用代码,则代码可以正常工作..我不知道为什么..(顺便说一句,非常感谢:))
var codevalidate = function(e) {
    if (!validationCode) { // if validation code didn't pass
        e.preventDefault(); // prevent form from submitting
    }
}
// register callback that will be called when user submits form
document.getElementById("vform").addEventListener('onsubmit', codevalidate);
<form id="vform" name="vform" action="vfrom_submit.php" method="post" 
  onsubmit="javascript:codevalidate(); return false;" >
        .....
</form>
vform.submit();
$("#vform").submit();
//OR
// document.getElementById("vform").submit();
// Although vform.submit() can also work.