Jquery触发器多次调用函数

时间:2013-12-18 10:29:15

标签: javascript ajax jquery

我有以下功能从列表jquery ajax调用中删除该项。现在我想重新加载项目,以便我使用触发器功能。

        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "FamilyManagerService.asmx/DeleteFreePurchasedFamily",
            dataType: "json",
            data: "{'FamilyId':'" + idFreeFamily + "'}",
            success: function (data) {
            }
        }).done(function () {
            if ($(".categoryList .activeFolder").length) {
                $.session.set("CategoryName", $(".categoryList .activeFolder").attr('id'));
                $.session.set("CategorynameView", $(".categoryList .activeFolder").text());
                $(".categoryList a").trigger("click");
            }
        });

注意: 1.触发事件触发此'.categoryList a'选择器中的所有锚链接。 我只想开一次这个事件。

尝试包括stopPropagation,stopImmediatePropagation,PreventDefault但它会多次触发。

$('.categoryList a').click(function (e) {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "FamilyManagerService.asmx/getPurchasedParameterType",
        dataType: "json",
        data: "{'categoryName':'" + categoryName + "', 'IsFreeFamily':'" + true + "'}",
        success: function (data) {
            //TODO:
        }
    });
    e.stopPropagation();
    e.stopImmediatePropagation();
    return false;
});

请建议我如何才能召唤该活动一次。

1 个答案:

答案 0 :(得分:1)

正如评论中提到的DontVoteMeDown,如果您的HTML中有几个与.categoryList a对应的元素,那么JQuery将在每个元素上触发点击事件,并且您的函数将被调用好几次。

触发点击时,您可以尝试在JQuery选择器中更具体。 (添加一个类或ID以确保只有一个链接与您的选择器匹配)。

OR(可能是更好的解决方案)

也许你的“触发点击”方法不合适。只需通过调用函数(类似于您的点击回调)进行新调用,而无需单击。

var reloadItems = function(){
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "FamilyManagerService.asmx/getPurchasedParameterType",
        dataType: "json",
        data: "{'categoryName':'" + categoryName + "', 'IsFreeFamily':'" + true + "'}",
        success: function (data) {
            //TODO:
        }
    });
}

 $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "FamilyManagerService.asmx/DeleteFreePurchasedFamily",
        dataType: "json",
        data: "{'FamilyId':'" + idFreeFamily + "'}",
        success: function (data) {
        }
    }).done(function () {
        if ($(".categoryList .activeFolder").length) {
            $.session.set("CategoryName", $(".categoryList .activeFolder").attr('id'));
            $.session.set("CategorynameView", $(".categoryList .activeFolder").text());
            reloadItems();
        }
    });

这也简化了您的事件处理(如A. Wolff评论的那样):

$('.categoryList a').click(reloadItems);