jQuery - .each函数中的preventDefault()

时间:2015-11-21 15:52:55

标签: javascript jquery

我想在.each函数中使用preventDefault()来收集按钮并且它不起作用。当我使用一个.click函数时,它工作正常,但内部.each不是

我做错了吗?

这是我的.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 );
        }
    });


});

感谢您的回答

2 个答案:

答案 0 :(得分:1)

您正在使用.clone克隆元素,这意味着您实际上并未将事件侦听器附加到DOM中的任何内容。必须使用JavaScript手动将克隆元素插入到DOM中,才能使它们生效。

答案 1 :(得分:0)

这不是正确的方法。以下应该工作:

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

此处给出了有关点击事件的更多详细信息: https://api.jquery.com/click/