使用javascript将input type=text更改为type=submit会触发提交

使用javascript将input type=text更改为type=submit会触发提交,input,triggers,submit,Input,Triggers,Submit,我正在尝试编写一个表单,您可以使用下一个按钮(隐藏当前字段集并显示下一个)和上一个按钮(隐藏当前字段集并显示上一个)在表单内部导航。这两个输入有一个onclick函数,该函数将根据我们使用的字段集将字段集类名从非活动更改为活动。我想在用户到达最终字段集时更改下一个按钮的输入类型,这样他就可以提交了,但它似乎会自动触发提交事件,这意味着当用户到达最终字段集时,他无法填写任何输入,因为表单将自动提交 下面是代码: //When the last fieldset show if (fieldset

我正在尝试编写一个表单,您可以使用下一个按钮(隐藏当前字段集并显示下一个)和上一个按钮(隐藏当前字段集并显示上一个)在表单内部导航。这两个输入有一个onclick函数,该函数将根据我们使用的字段集将字段集类名从非活动更改为活动。我想在用户到达最终字段集时更改下一个按钮的输入类型,这样他就可以提交了,但它似乎会自动触发提交事件,这意味着当用户到达最终字段集时,他无法填写任何输入,因为表单将自动提交

下面是代码:

//When the last fieldset show 
if (fieldset[4].className == "active") {
    var next = document.getElementById('next');
    next.onclick='';
    next.type="submit";
    next.value="Submit";
    next.id='submit';
}

有什么我应该添加的来停止提交自动触发吗?

我认为,与其尝试“破解”现有按钮并将其转换为提交,您可以只使用两个按钮,一个“下一步”和另一个“提交按钮”(最初隐藏),一旦用户进入最后一步,您可以隐藏“下一步”按钮并显示“提交按钮”按钮

它可以是这样的:

//When the last fieldset show 
if (fieldset[4].className == "active") {
    // hide the next button
    document.getElementById('next').style.display='none';
    // show the submit button
    document.getElementById('submit-button').style.display='';
}

让这些按钮与css完全显示在同一个位置并不复杂,因此用户不会注意到替换。

出于安全原因,有些浏览器不允许您更改类型。因此,您经常会遇到问题。只需在boris提到的两个输入之间切换(或完全替换).但要回答你的问题:


您可以通过另一个on submit事件捕获自动提交。首先,单击按钮,将按钮标记为类或数据属性,如“preventSubmit”。在提交事件中,检查此类或数据属性是否存在并阻止提交(f.ex,带prevent default())并删除未停止用户所有想要提交的类。

为什么不添加一个事件来提交您当前所在的表单:

if (fieldset[4].className == "active") {
   var next = document.getElementById('next');
   next.onclick=(function() { document.forms[0].submit(); });
   //next.type="submit";
   next.value="Submit";
   next.className="MySubmit"; // try to style it as a button for better UX
   //next.id='submit';
}

我已经在JSFIDLE中测试了您的代码,效果很好。这意味着有一些东西会触发提交。也许您可以在该页面中发布整个javascript,然后我可以检查问题所在

var next=document.getElementById(“next”);
//next.type=“提交”;
next.setAttribute('type','submit');//我更喜欢使用.setAttribute方法
next.onclick='';
next.value=“提交”;
next.id='submit';