jquery – 在Chrome/Safari中提交两次表单

前端之家收集整理的这篇文章主要介绍了jquery – 在Chrome/Safari中提交两次表单前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻求执行基本的表单帖子,但是以下内容在Chrome和Safari中提交服务器两次(但在Firefox中表现如预期):
<form id="create-deck-form" action="/decks/create" method="post">
  <fieldset>
    <legend>Create new deck</legend>
    <label for="deck-name-field">Name</label>
    <input id="deck-name-field" name="deck-name-field" type="text" value="" maxlength="140" />

    <label for="tag-field">Tags</label>
    <input id="tag-field" name="tag-field" type="text" value="" maxlength="140" />

    <input class="add-button" type="submit" value="Create" />
  </fieldset>
</form>

我想使用onsubmit属性在提交之前对字段执行验证,但只要返回值为true,表单就会提交两次.

我试图将jQuery处理程序绑定到表单,但是在这里,默认行为没有被阻止,表单被提交两次,例如:

<script type="text/javascript">
 $(document).ready(function() {
     $("#create-deck-form").submit(function(event){
          if($("#deck-name-field").val() == "") {
            event.preventDefault();
            alert("deck name required");
          }
        });
 });
</script>

虽然我认为这对一双新鲜的眼睛有一些令人眼花缭乱的明显错误,但我深感困惑的是,为什么提交,无论是否经过验证,都会在Chrome和Safari中向服务器发送重复的帖子.任何见解都会让我感激不尽.

解决方法

此问题实际上与FaceBox( http://defunkt.github.com/facebox/)相关联. FaceBox初始化会在页面加载后导致第二组请求.因此,如果您发布到/ myaction / create,FaceBox将启动第二组请求,并将基本URL设置为/ myaction / create.修复方法重定向到一个URL,该URL在发布帖子后处理获取请求,因此您最终不会执行两次发布.非常感谢您的帮助.

猜你在找的jQuery相关文章