2012-02-19 105 views
0

我正在使用ajax來更新數據庫並使用新文件夾,但它在命中ENTER後刷新頁面。 在我的表單上我有onkeypress="if(event.keyCode==13) savefolder();" 這裏是我有的javascript代碼:它的功能基本上是在你點擊後輸入它調用函數savefolder,保存文件夾,然後通過ajax發送一個請求將文件夾添加到數據庫。問題是刷新頁面...我希望它保持在同一頁面上。 有什麼建議嗎?謝謝。在點擊ENTER後刷新頁面

<script> 


function savefolder() { 

var foldername= jQuery('#foldername').val(), 
    foldercolor= jQuery('#foldercolor').val(); 
// ajax request to add the folder 
      jQuery.ajax({ 
       type: 'get', 
       url: 'addfolder.php', 
       data: 'foldername=' + foldername + '&foldercolor=' + foldercolor,  
       beforeSend: function() { alert('beforesend');}, 
       success: function() {alert('success');} 
      }); 

return false; 
} 
</script> 
+1

爲什麼你有'e'聲明兩次的時間(在'doc.ready()'和'作爲window.event')和'回報假;'在'savefolder()'末尾應該(我想)取消表單提交,如果這是它的附加方式。你發佈的內容沒有嚴格意義(doc.ready()'塊的末尾在哪裏?)。 – 2012-02-19 02:57:02

+0

另外,* ajax *不會執行往返;你的'submit'處理程序不會取消'submit'事件的是事實。我還沒有看到像你一樣的方法(也許它是IE特有的?),我沒有看到你聲明'submit'處理程序的位置。 – 2012-02-19 02:59:33

+0

@JaredFarrish他在窗體標籤上定義了一個「inline onkeypress」事件... – xandercoded 2012-02-19 03:01:27

回答

2

這是工作:

<form> 
    <input type="submit" value="Enter"> 
    <input type="text" value="" placeholder="search"> 
</form> 

function savefolder() { 
    var foldername= jQuery('#foldername').val(), 
     foldercolor= jQuery('#foldercolor').val(); 

    jQuery.ajax({ 
     type: 'get', 
     url: '/echo/html/', 
     //data: 'ajax=1&delete=' + koo,  
     beforeSend: function() { 
      //fe('#r'+koo).slideToggle("slow"); 
     }, 
     success: function() { 
      $('form').append('<p>Append after success.</p>'); 
     } 
    }); 

    return false; 
} 

jQuery(document).ready(function() { 
    $('form').submit(savefolder); 
}); 

http://jsfiddle.net/TFRA8/

你需要檢查一下,如果你有任何錯誤,在加工過程中(螢火蟲或Chrome控制檯可以幫助)。就目前而言,您的代碼格式不正確,因爲$(document).ready()從未在問題中包含的代碼中關閉。

+0

謝謝Jared。不幸的是我的頁面上的小提琴工作仍然刷新。頁面上有另一種形式,我的輸入框在裏面,我想我需要把它從表單中拿出來,然後它應該管用。 – cppit 2012-02-19 03:27:51

+1

我會放棄'onsubmit'的'onkeypress'事件方法,因爲它是由'enter'按鍵以及'submit'輸入元素點擊觸發的,而AFAICT則不會做任何事情。我也不使用內聯事件處理程序,即不使用'onsubmit =「return saveFolder()」',而是使用'$('form')。submit(handler ...)'。沒有看到實際的代碼和標記直播,我不知道該說些什麼,除非有一個未被捕獲的錯誤或者不能「取消」代碼執行並允許表單繼續提交。 – 2012-02-19 03:30:28

+0

gotcha。謝謝 – cppit 2012-02-19 04:15:12

-1

由於默認情況下,輸入按鈕提交表單表單上,您不僅需要用自己的代碼處理這個問題,但之後取消該事件。

試試這個代碼,而不是:

onkeypress="if(event.keyCode==13) {savefolder(); return false;}" 

的onkeypress事件事件將表明,JavaScript的返回值,只有不斷與它的事件,如果它返回true。

+0

謝謝xthexder但是這返回一個空白頁 – cppit 2012-02-19 03:24:44

1

只需stop the propagation of the event在表單提交

jQuery(document).ready(function($) { 
    $("#whatever-form-you-are-pulling-your-values-from").submit(function(event) { 
    var foldername = $('#foldername').val(); 
    var foldercolor = $('#foldercolor').val(); 

    event.stopPropagation(); 

    // ajax request to add the folder 
    $.ajax({ 
     type: 'get', 
     url: '../addfolder.php', 
     data: 'ajax=1&delete=' + koo,  
     beforeSend: function() { fe('#r'+koo).slideToggle("slow"); }, 
     success: function() { } 
    }); 
});