简体   繁体   English

jQuery - .each 函数中的 preventDefault()

[英]jQuery - preventDefault() in .each function

I want to use preventDefault() in .each function for collection of buttons and its not working.我想在 .each 函数中使用 preventDefault() 来收集按钮,但它不起作用。 When I use it with one .click function it works fine but inside .each is not当我将它与一个 .click 功能一起使用时,它工作正常,但在 .each 内部却不是

Whan am I doing wrong?我做错了什么?

Here is my .js code这是我的 .js 代码

$(document).ready(function() {

    var findingStatus = $('#findingStatus').attr('finding-status-type');
    var findingLike = $('#finding_like_btn');
    var findingDislikeBox = $('.finding_dislike_add');
    var findingDislikeCollection = $('.finding_dislike_add_btn')
    var findingUnlike = $('#finding_unlike_btn');
    var findingDislikeRemoved = $('#finding_dislike_removed');

    var alertBox = $('.alert-box').hide();



    if (findingStatus == 0) {
        findingDislikeBox.show();
        findingUnlike.hide();
        findingDislikeRemoved.hide();
    }
    else if (findingStatus == 1) {
        findingDislikeBox.hide();
        findingUnlike.show();
        findingDislikeRemoved.hide();
    } 
    else if (findingStatus == 2) {
        findingDislikeRemoved.show();
        findingUnlike.show();
        findingDislikeBox.hide();
        findingLike.hide();

    }

    findingDislikeCollection.each(function() {



        var findingDislike = $(this).clone();
        var url = findingDislike.attr("href");

        findingDislike.click(function(event) {

            event.preventDefault();

            $.ajax({
                url: url,
                type: "POST",
                dataType: "json",
                success: function(data) {

                    if (data.profileState == 1) {

                        $('#dislike_count_btn').text('Odrzuć' + data.DislikeCount);
                        findingDislikeBox.hide();
                        findingDislikeRemoved.show();
                        findingUnlike.show();
                        //findingUnDislike.show();
                        //findingUnDislike.attr('disabled', false );
                        //findingUnDislike.text('Cofnij');
                    }
                    else {
                        alertBox.show();
                        if ($('.alert-box-msg').length==0) {
                            $('.alert-area').prepend('<p class="alert-area alert-box-msg">Żeby korzystać z tej funkcji musisz być zalogowany.</p>');

                        }
                        findingDislike.attr('disabled', false );
                    }

                },
                error: function() {
                    alert('Problem z serwerem, spróbuj ponownie za kilka minut.');
                    findingDislike.attr('disabled', false );
                }

            });


        });



    });



    $('html').click(function (e) {
        if (!$(e.target).hasClass('alert-area')) {
            $('.alert-box').hide();
            findingDislike.attr('disabled', false );
        }
    });


});

Thanks for answer谢谢回答

You are cloning the element with .clone which means you're not actually attaching an event listener to anything in the DOM.您正在使用.clone克隆元素,这意味着您实际上并未将事件侦听器附加到 DOM 中的任何内容。 Cloned elements must be manually inserted into the DOM with JavaScript for them to have any effect.克隆的元素必须使用 JavaScript 手动插入到 DOM 中才能生效。

This is not a correct way.这不是正确的方法。 Following should work:以下应该工作:

findingDislikeCollection.click(function(event){
  var findingDislike = $(this);
  var url = findingDislike.attr("href");
  //AJAX call
  event.preventDefault();
});

More details on click event are given here: https://api.jquery.com/click/点击事件的更多细节在这里给出: https : //api.jquery.com/click/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM