2011-04-29 78 views
0

我有以下的HTML标签:jQuery的替换

<a class="save action_btn" onclick="return false;">Save</a> 

,代码:

$(".save").live('click', function() { 
          $.post("update.php", {uid: my_uid, save: "yes", mid: "<?php echo $mid; ?>"}, function(){ 
            $(this).replaceWith('<a class="action_btn x saved" onclick="return false;">Saved</a>'); 
           } 
          ); 
       }); 

但是,为什么不改变HTML标签?

+0

你确定POST正在工作吗?我在这里试过了:http://jsfiddle.net/sPbRZ/,但是没有POST并且正在工作...... – 2011-04-29 06:14:00

+0

我确实在函数后面放了一个警告,在函数后回调,它执行 – adit 2011-04-29 06:16:49

回答

0

这是因为你是从“自身”擦除的元素。你需要一个小的延迟,像这样:

$(".save").live('click', function() { 
    var $btn = $(this); 
    $.post("update.php", {uid: my_uid, save: "yes", mid: "<?php echo $mid; ?>"}, function(){   
     setTimeout(function(){ 
      $btn.replaceWith('<a class="action_btn x saved" onclick="return false;">Saved</a>'); 
     }, 100); 

    }); 
}); 

希望这会有所帮助。

编辑:仅当ajax请求是同步的时,才需要延迟(setTimeout)。这可能会发生,如果出现了一个电话$.ajaxSetup({async: true});

+0

分析我的代码,这种情况不需要延迟。但是,如果不存在异步的ajax调用,这将是强制性的,所以我会让它像现在一样,以防有人需要它。 – 2011-04-29 06:27:04

+0

setTimeout与修复无关。 'var $ btn = $(this);'是什么修复它。看到谢诺韦的答案。 – 2011-04-29 06:41:51

+0

@ c-smile,你看过我的评论吗? – 2011-04-29 06:49:09

2

尝试使用封闭,如下图所示:

$(".save").live('click', function() { 
    var $this = $(this); 
    $.post("update.php", {uid: my_uid, save: "yes", mid: "<?php echo $mid; ?>"}, function(){ 
     $this.replaceWith('<a class="action_btn x saved" onclick="return false;">Saved</a>'); 
    }); 
}); 
+0

会说。 ..我不认为$(this)引用ajax回调中的正确元素...你必须事先保存它,因为这个答案建议 – mpen 2011-04-29 06:20:12

0
  • 内从$.post调用回调函数,该this关键字不再是锚标记。您可以阅读关于JS如何处理thishere的信息,但只要说您需要将this的值存储在变量中并将其用于回调内部,就可以将其存储在$.post之前。
  • 不需要在HTML中有一个onclick处理程序并返回false。相反,只需在您的点击回拨中插入event对象并致电preventDefault即可。

HTML:

<a class="save action_btn">Save</a> 

JS:

$(".save").live('click', function(event) { 
    event.preventDefault(); 
    var $this = $(this); 
    $.post("update.php", {uid: my_uid, save: "yes", mid: "<?php echo $mid; ?>"}, function(){ 
    $this.replaceWith('<a class="action_btn x saved" onclick="return false;">Saved</a>'); 
    }); 
}); 
0

提供div标签ID,并尝试 `

<div id="replaceid"><a class="save action_btn" onclick="return false;">Save</a></div> 

$活(( “拯救”)。 '点击',函数(){.012.post(“update.php”,{uid: my_uid,save:“yes”,mid:“”},function(){('#replaceid')。replaceWith('<a class="action_btn x saved" onclick="return false;">Saved</a>'); } ); });

`