表单在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,因此您不会最终执行该文章两次。 非常感谢您的帮助。


我不是100%肯定的,但请尝试下面这个:

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

如果这不起作用,请看看

for(e in $("#create-deck-form").data('events'))
    alert(e);

这会提醒所有与您的form绑定的事件。 也许有更多的事件处理程序? 否则也警报/日志

$("#create-deck-form").attr('onclick')

$("#create-deck-form").attr('onsubmit')

以防万一。


你可以尝试return false; 在您的警报和删除event.preventDefault(); 。 也许你也需要return true; 在你的else子句中。 我相信我在某个地方工作。

链接地址: http://www.djcxy.com/p/46705.html

上一篇: Form submitted twice in Chrome/Safari

下一篇: is this a bug? please check it out