0

問題があり、古い値がどこから来ているのかわかりません。私が持っているのは、ユーザーが各返信に対して良いアドバイス、悪いアドバイスを評価できるフォーラムと返信のリストです。1 つをクリックすると、Java スクリプトが起動され、データベースが更新されます... 他のボタンが非表示になり、何かが起こったことを示します。私が問題に遭遇している場所は、最初のボタンは設計どおりに機能しますが、他のすべてのボタンは次のクリック イベントの値 (既に投票した場所でスクリプトが応答する) だけでなく、以前にクリックされたすべての値を渡しています。4 つの異なる投稿に投票すると、4 つの値すべてが投稿され、3 つが既に投票済みであることを示します。以前のクリック イベントの値を消去するにはどうすればよいですか?

  <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 に答える