2017-06-30 11 views
0

私のpreventDefaultイベントは動作しませんが、なぜudestandできません。私は周りを探索していたが、どこに問題があるか分からなかった。私の場合はどこかに答えがある場合は私を許してください!これは私のコードです:preventDefaultがajaxリクエストで機能しない

var $vote_btn_up = $('.vote_comment_up_' + <?= $model->id ?>); 
var $vote_btn_down = $('.vote_comment_down_' + <?= $model->id ?>); 

$vote_btn_up.on('click', function (evt) { 
    evt.preventDefault(); 
    var $commentId = 0; 
    var $postId = 0; 
    if($vote_btn_up.data('comment_id') != 0){ 
     var $commentId = $vote_btn_up.data('comment_id'); 
    } 
    if($vote_btn_up.data('post_id') != 0){ 
     var $postId = $vote_btn_up.data('post_id'); 
    } 
    var $flag = $vote_btn_up.data('flag'); 
    var $userId = $vote_btn_up.data('user_id'); 
    $.ajax({ 
     method : 'post', 
     url : '/admin/site/like-dislike', 
     data : {flag : $flag, comment_id : $commentId, user_id : $userId, post_id : $postId}, 
     success : function(data){ 
      console.log(data); 
      if($flag == 1){ 
       $('.thumb-up_<?= $model->id ?>').text(data); 
      }else if($flag == 2){ 
       $('.thumb-down_<?= $model->id ?>').text(data); 
      } 
     } 
    }); 
}); 
+1

デフォルトは何ですか?実際のボタンの要素は何ですか?リンク?他に何か?これに伴うHTMLをいくつか示してください。 – CBroe

+1

js 'event.stopPropagation()'またはjQueryの 'event.stopImmediatePropagation()'を試してみましたか? – Kaddath

+1

ちょうどfalseを返します: '$ btn.on(" click "、function(){.... return false;}' –

答えて

0

防止する行動はありますか? evt.preventDefault()は、フォームがあり、ボタンが送信ボタンでフォームを送信しないようにしたい場合に機能します。しかし、これらは、私はあなたがボタン一つで、より多く作成することを考えて、私が多くの仮定...

var $vote_btn_up = $('.vote_comment_up'); 
 

 
$vote_btn_up.on('click', function (evt) { 
 
    evt.preventDefault(); 
 
    console.log("log"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form action="http://google.de"> 
 
    <button type="submit" class="vote_comment_up"> 
 
    Button 
 
    </button> 
 
</form>

0

です:

var $vote_btn_up = $('.vote_comment_up_' + <?= $model->id ?>); 

そして次のオーバーライド以前そうであればを...たとえば配列に配置して、各ボタンのハンドラを設定する必要があります。

for(var i=0;i<=X;i++){ 
    $vote_btn_up[i].on('click',function(){ 

    }); 
}); 

または

$('.vote_comment_up_' + <?= $model->id ?>).each(function(){ 
    $(this).on('click',function(){ 

    }); 
}); 
+0

いいえ、ループ内にイベントハンドラを追加しないでくださいOPはイベントハンドラ内で '$(this) 'を使うことができますが、このようにしないでください。イベントハンドラ内のコードを変更するように提案していないので、これはゼロの効果があります。 –

関連する問題