2012-02-19 136 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() { } 
    }); 
});