2011-10-18 103 views
0

我有一個非常簡單的jQuery AJAX代碼片段,它應該提交沒有頁面刷新的表單,但由於某種原因它被忽略並且表單被正常提交。jQuery ajax表單仍然提交WITH頁面刷新

jQuery代碼:

$(".createEvent").live('click', function() { 

       $(".eventResult").html($("<img/>").attr("src", "<?php echo __FULL_PATH; ?>images/loader.gif").attr("id", "loader")); 
       $('.eventResult').show(); 
       var form = $(this).parents('form:first'); 
       var eventName = $("input[name='eventName']",form).val(); 
       var eventID = $("input[name='eventName']",form).id(); 

        var dataString = 'eventName ='+ eventName; 
        $.ajax({ 
        type: "POST", 
        url: "{site.createPageURL}"+eventID+"/event/", 
        data: dataString, 
        cache: false, 
        success: function(html) { 
        alert('done'); 
        $('.eventResult').html(html); 
        $('.eventForm').hide(); 
        updateBookingList(eventID);    

        } 
       }); 
       return false; 

     }); 

和形式:

<form id="eventForm_1318915800" method="POST" action="path_here..." name="eventForm"> 
<label for="eventName">Please enter a name for the event</label> 
<input id="1318915800" type="text" name="eventName"> 
<label for="submit">&nbsp;</label> 
<input class="createEvent" type="submit" value="Create event" name="submit"> 
</form> 
<div id="eventResult_1318915800" class="eventResult">&nbsp;</div> 
+0

請檢查函數updateBookingList(eventID)是否有任何重定向或刷新。 – Prasanth

回答

2

這是JS錯誤在中間的指示 - 這繞過return false

+0

完美,這正是發生的事情。感謝您的提示 - 我實際上並不知道Firebug可能會導致Javascript錯誤,所以我能夠選擇一種非常有用的調試方法。 – Amo

2

您需要添加在你調用ajax之前調用event.preventDefault();。你的函數應該如下修改:

$(".createEvent").live('click', function(event) { 
    event.preventDefault(); 
    . 
    . 
    . 
    //ajaxCall 
}); 
+0

+1 for preventDefault()over return false –

+0

這不會阻止從鍵盤觸發的提交。 – njr101

+1

是的。最好使用$(「#eventForm_1318915800」)。live('submit',function(){}) –

2

如果你想停止的形式提交你可能會更好做:

$("#eventForm_1318915800").submit(function() { return false; }); 

這是更好,因爲它也將處理一個提交由輸入觸發關鍵的例子。