Javascript Jquery触发器多次调用函数

Javascript Jquery触发器多次调用函数,javascript,ajax,jquery,Javascript,Ajax,Jquery,我使用下面的函数从jQueryAjax调用列表中删除该项。现在我想重新加载这些项,这样我就可以使用触发器功能了 $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "FamilyManagerService.asmx/DeleteFreePurchasedFamily", dataTyp

我使用下面的函数从jQueryAjax调用列表中删除该项。现在我想重新加载这些项,这样我就可以使用触发器功能了

        $.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´选择器中的所有锚链接。 2.我只想发动那场比赛一次

尝试包括StopRopagation、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;
});

请建议我如何只调用一次事件。

正如DontVoteMeDown在评论中指出的那样,如果您的HTML中有几个元素对应于
。categoryList a
,那么JQuery将在每个元素上触发一个单击事件,并且您的函数将被调用多次

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

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

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

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:
        }
    });
}

这也简化了事件处理(正如A.Wolff所评论的):


您的选择器
.categoryList a
告诉它触发所有链接第一个ajax请求的上下文是什么?为什么要触发事件,如果使用引用的函数,为什么不调用处理程序?是否要执行一次?或者每个元素一次?@Irvindiminakadeward我想执行一次。@DontVoteMeDown我怎么能调用事件只触发一次?即使你给出类或id和触发器,它也会以递归方式触发,因为单击函数将从中递归调用,而单击回调对我来说似乎不是递归的。我错过什么了吗?请解释:)即使您为链接赋予类,单击的元素也是.categoryList a列表中的一个元素,因此该函数再次开始递归。单击函数再次在success函数中调用,因此在onclick处理程序中它将是递归+的,这与触发单击事件的ajax请求不同。这就是为什么我问第一个ajax请求的OP上下文,他仍然无法回答。。。
 $.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();
        }
    });
$('.categoryList a').click(reloadItems);