.click()处理程序重新加载页面而不是触发事件

时间:2013-08-27 12:34:57

标签: jquery

我正在使用CodeIgniter并尝试实现jQuery / AJAX来触发我的网站上的操作而不刷新页面。简单地说就像Facebook帖子和之类的按钮

到目前为止,我设法整理了一个小脚本来完成工作,除了每三次点击重新加载页面。

我将操作按钮括在div中,其ID为'post_' +帖子的数据库id

然后我为点击的链接添加了一个值属性,该链接包含帖子ID,类就像。

<div>
<h3>User Name</h3>
<p>Post Content</p>
<div id="post_3">
 <a href="#" class="like" value="3">Like</a>
<div>
</div> 



$(".like").click(function(event){
var post = $(this).attr("value");
     var mydv = "#post_"+post;

      $.ajax({
      type: "POST",
      url: 'localhost/like/'+post,
      success: function(response) {
      if (response == "Success")
        {
            $(mydv).load("localhost/newsfeed"+mydv);
          }
          else
          {
            alert("Error");
          }

        }
      });
     event.preventDefault();
  });

当页面在第三次点击时重新加载时,它只是一个简单的重新加载没有反馈或过程被触发。

我一定是做错了什么,我只是不知道是什么。

3 个答案:

答案 0 :(得分:2)

您正在替换包含div的{​​{1}}的内容。 a.like处理程序不会附加到click调用后添加的任何锚点。您需要使用事件委派:

load()

Documentation for .on()

答案 1 :(得分:0)

  • 在事件处理程序代码的顶部添加event.preventDefault();代码。
  • 还将代码包装在document.ready
  • 还要确保加载了jQuery。

答案 2 :(得分:0)

尝试使用return false(而不是event.preventDefault();):

$(".like").click(function(){
  ...
  return false;
});

或者@Dipesh Parmar提到event.preventDefault();应位于处理程序的顶部。