0

我有一个问题,只是找不到旧值的来源。我拥有的是一个论坛和回复列表,用户可以在其中对每个回复的好建议和坏建议进行评分。如果您单击一个,它会触发一个 java 脚本并更新数据库......另一个按钮隐藏以显示发生的事情。我遇到问题的地方是在新页面刷新上,第一个按钮按设计工作,但所有其他按钮不仅传递下一个单击事件值(脚本在您已经投票的地方响应),而且传递所有先前单击的值。如果我对四个不同的帖子进行投票,那么所有四个值都会发布,三个显示我已经投票。如何清除之前的点击事件值?

  <script>
     function doGABAbad(forum_post_id,type){
         $(".badadviceclick").click(function(){
         var element = $(this);
         var I = element.attr("id");
         var info = 'id=' + I; 
        $("#gaba_float_right").html('<img src="loader.gif"/>').show();
       $.post('updateGABA.php', {forum_post_id: forum_post_id,type: type}, function(data){
           if(isNaN(parseFloat(data))){
              alert(data);
           }else{
            $('#'+forum_post_id+'_'+type+'s').text(data);
           }

           $('#goodadvice'+I).fadeOut(200).show();

        });
         });
     }
  </script>
        <script>
     function doGABAgood(forum_post_id,type){
         $(".badadviceclick").click(function(){
         var element = $(this);
         var I = element.attr("id");
         var info = 'id=' + I; 
        $("#gaba_float_right").html('<img src="loader.gif"/>').show();
       $.post('updateGABA.php', {forum_post_id: forum_post_id,type: type}, function(data){
           if(isNaN(parseFloat(data))){
              alert(data);
           }else{
            $('#'+forum_post_id+'_'+type+'s').text(data);
           }
          $('#badadvice'+I).fadeOut(200).show();

        });
         });
     }
  </script>  

这是我正在构建我的 Div 的地方

<div id="goodadvice'.$forum_post_id.'">
<a id="'.$forum_post_id.'"  class="badadviceclick"  href="#" onClick="return false" onmousedown="javascript:doGABAgood('.$forum_post_id.',\'goodadvice\');">Good Advice '.$good_advice.'</a>
</div>


<div id="badadvice'.$forum_post_id.'">
<a id="'.$forum_post_id.'"  class="badadviceclick"  href="#" onClick="return false" onmousedown="javascript:doGABAbad('.$forum_post_id.',\'badadvice\');">Bad Advice '.$bad_advice.'</a>
</div>
4

2 回答 2

0

原因是您在 javascript 和 jquery 中附加事件(基于 javascript 的事件中的基于 jquery 的事件)。你需要使用一个或另一个。

  <script>
     function doGABAbad(forum_post_id,type){
         var element = $(this);
         var I = element.attr("id");
         var info = 'id=' + I; 
        $("#gaba_float_right").html('<img src="loader.gif"/>').show();
       $.post('updateGABA.php', {forum_post_id: forum_post_id,type: type}, function(data){
           if(isNaN(parseFloat(data))){
              alert(data);
           }else{
            $('#'+forum_post_id+'_'+type+'s').text(data);
           }

           $('#goodadvice'+I).fadeOut(200).show();

        });
     }
     function doGABAgood(forum_post_id,type){
         var element = $(this);
         var I = element.attr("id");
         var info = 'id=' + I; 
        $("#gaba_float_right").html('<img src="loader.gif"/>').show();
       $.post('updateGABA.php', {forum_post_id: forum_post_id,type: type}, function(data){
           if(isNaN(parseFloat(data))){
              alert(data);
           }else{
            $('#'+forum_post_id+'_'+type+'s').text(data);
           }
          $('#badadvice'+I).fadeOut(200).show();

        });
     }
  </script>  
于 2013-01-07T20:04:41.547 回答
0

首先像这样修改HTML:

<div id="goodadvice'.$forum_post_id.'">
<a id="'.$forum_post_id.'"  class="goodadviceclick"  href="javascript:void(0);">Good Advice '.$good_advice.'</a>
</div>

<div id="badadvice'.$forum_post_id.'">
<a id="'.$forum_post_id.'"  class="badadviceclick"  href="javascript:void(0);">Bad Advice'.$bad_advice.'</a>
</div>

接下来,您可以像这样重构函数:

function doGABA(e) {
    e.preventDefault();
    var element = $(this);
    var forum_post_id = element.attr("id");
    var type = element.hasClass('goodadviceclick') ? 'good' : 'bad';
    var info = 'id=' + I; 
    $("#gaba_float_right").html('<img src="loader.gif"/>').show();
    $.post('updateGABA.php', {forum_post_id: forum_post_id, type: type + 'advice'}, function(data){
        if(isNaN(parseFloat(data))){
            alert(data);
        }else{
            $('#'+forum_post_id+'_'+type+'s').text(data);
        }
         $('#' + type + 'advice'+I).fadeOut(200).show();
    });
}

然后删除锚标记上的 onmousedown 属性,并在 jQuery 中执行此操作:

$('.goodaviceclick, .badadviceclick').click(doGABA);
于 2013-01-07T20:16:29.533 回答