1

我有一个关于在.post()不回发包含页面的情况下使用 jQuery 方法的问题。

这是图书馆系统中书页的代码。如果用户点击“Return book”按钮,我使用 jQuery.post()来设置在数据库中返回的书。

<form id="checkoutform">
<input type="submit" id="checkout" class="button" value="Return book" />
</form>
$(document).ready(function(){ 
  $("#checkout").click(function() {  
    $.post('/transaction/', { book_id: '{{ book.id }}', user_id: username }, function(data) {
         alert(data);
         });
    });
});

数据库事务工作查找,但它也回发页面。

这本身不是问题,但它会改变后退按钮的行为 - 这是一个问题。如果用户单击“归还书”,然后使用浏览器上的“后退”按钮,他们将看到在归还书之前的书页,因此看起来该书仍处于已签出状态。

有没有办法:

  • 避免使用 jquery.post()方法回发页面,而只更改我需要的页面部分,或者
  • 修复后退按钮,使其直接返回前一页?

谢谢!

4

4 回答 4

1

实际上,可能发生的情况是您的点击功能正在触发,然后,默认功能(按下“提交”按钮时提交表单)正在发生。

为了防止这种情况,要么使按钮成为普通按钮而不是提交按钮,要么return false在点击功能的末尾添加。或者看看 jQuery 的event.stopPropagation()

于 2011-01-06T17:36:06.940 回答
1

添加return false到 jQuery 事件处理程序的末尾将阻止执行默认事件处理程序。因为在您的情况下,提交表单的默认行为是进行 POST,这就是发生的情况。

于 2011-01-06T17:36:36.277 回答
0

在函数末尾添加 return false

$(document).ready(function(){ 
  $("#checkout").click(function() {  
    $.post('/transaction/', { book_id: '{{ book.id }}', user_id: username }, function(data) {
         alert(data);
         });
   return false;
    });

});
于 2011-01-06T17:34:26.740 回答
0

尝试return false;加入点击功能。也许它实际上是在提交页面,而不是异步进行。如果这不起作用,您的 ajax 页面是什么样的?

于 2011-01-06T17:35:18.437 回答