使用preventDefault的替代方法提交表单

时间:2016-01-19 12:21:03

标签: javascript jquery html firefox preventdefault

我很难让我的网站的登录功能在所有浏览器中运行 - 最接近我可能会成为Firefox中的“ReferenceError:event not defined”错误。

我知道有一些关于preventDefault的现有帖子在Firefox中的处理方式不同,但我发现的所有选项似乎都不适用于所有浏览器。这是我的基本设置......

<button id="signinbutton" name="signin" type="submit" onclick="signInSubmit(this.form, this.form.signInPassword);">Sign In</button>

function signInSubmit(theForm, theHashPassword) {
  event.preventDefault(); //disables submit action so I can add custom code
  //rest of sign in...
  //e.g. theForm.appendChild(p);
}

firefox给出错误的原因是我没有明确地从我的点击/提交处理程序中传递“事件”(由于我直接调用“signInSubmit”,我认为我无法使用现有的设置与其他论点)。从我试验的其他帖子中......

  • 删除event.preventDefault()并将按钮类型从“submit”更改为“button”(但这只会阻止所有浏览器上的登录工作,因为我使用this.form传递数据)< / p>

  • 删除event.preventDefault()并在signInSubmit()的底部添加“return false” - 这也与上面的问题相同

  • 最有希望的建议是从我的按钮中删除onclick属性并实现类似......

    $('#signInForm').submit(function(e) { if(!ready){ e.preventDefault(); signInSubmit(this.form, this.form.signInPassword, false); } });

但是当然从jquery选择.submit()的上下文中,我不能使用“this.form”来引用我的原始表单,也不能让我能够以预期的格式返回表单通过signInSubmit与$('#signInForm')" or "$('#signInForm').serialize()

道歉,如果这个问题在这个问题上相当混乱,但是我真的希望有人在我的设置中注意到一些可以重新解决这个问题的东西 - 感谢任何想法!

1 个答案:

答案 0 :(得分:1)

  

最有希望的建议是从我的按钮中删除onclick属性并实现类似

的内容

是。那样做。

  

我无法使用&#34; this.form&#34;引用我的原始表格

这是因为事件是在表单的上下文中触发而不是提交按钮。使用this代替this.form

 $('#signInForm')" or "$('#signInForm').serialize()

原始函数需要一个表示表单的DOM对象。第一个是围绕这样一个对象的jQuery包装器,第二个是来自表单的一串URL编码数据。

如果你打算使用那种方法(你不应该因为this更优雅),那么你可以使用$('#signInForm')[0]从jQuery对象中提取DOM对象。