首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个Jquery .delegate()问题

多个Jquery .delegate()问题
EN

Stack Overflow用户
提问于 2011-08-20 21:23:55
回答 1查看 857关注 0票数 0

我有多个jquery委托函数来删除列表中的项。它们第一次工作得很好,但似乎停止了对其他删除功能的删除功能。

所以我有3张桌子,可用性,经验和爱好。如果我点击从爱好列表中删除一个项目,它就会起作用,并使其他项目不起作用。从业余爱好中删除的后续操作仍然有效。

从firebug的角度来看,似乎每次点击从可用性或体验中删除条目都会触发最初触发从业余爱好中删除的链接,就好像它已经保存了它,并且不会改变它。

代码语言:javascript
复制
$(document).ready(function () {
    var i = 1;
    var pager;
    var pai;
    var thetab;
    $('#tabs-5').delegate('.delav', 'click', function (e) {
        e.preventDefault();
        pager = $(this).attr("href");
        $("#dialog2").dialog({
            autoOpen: false,
            width: 600,
            modal: true,
            buttons: {
                "Confirm": function () {
                    $('#ava_list').html("Loading..");

                    pai = $('#epa_id').val();
                    thetab = "availability";
                    $.get("/_includes/functions.php", {
                        cache: false,
                        table: thetab,
                        pa: pai,
                        delattr: pager
                    }, function (data) {
                        $('#ava_list').html(data);
                    });

                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
        $("#dialog2").dialog("open");
    });
});
代码语言:javascript
复制
$(document).ready(function () {
    var i = 1;
    var pager;
    var pai;
    var thetab;
    $('#tabs-3').delegate('.delexp', 'click', function (e) {
        e.preventDefault();
        pager = $(this).attr("href");
        $("#dialog2").dialog({
            autoOpen: false,
            width: 600,
            modal: true,
            buttons: {
                "Confirm": function () {
                    $('#exp_list').html("Loading..");

                    pai = $('#epa_id').val();
                    thetab = "";
                    $.get("/_includes/functions.php?ms=", {
                        cache: false,
                        table: thetab,
                        pa: pai,
                        delattr: pager
                    }, function (data) {
                        $('#exp_list').html(data);
                    });

                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
        $("#dialog2").dialog("open");
    });
});
代码语言:javascript
复制
$(document).ready(function () {
    var i = 1;
    var pager;
    var pai;
    var thetab;
    $('#tabs-7').delegate('.delhob', 'click', function (e) {
        e.preventDefault();
        pager = $(this).attr("href");
        $("#dialog2").dialog({
            autoOpen: false,
            width: 600,
            modal: true,
            buttons: {
                "Confirm": function () {
                    $('#hob_list').html("Loading..");

                    pai = $('#epa_id').val();
                    thetab = "hobby";
                    $.get("/_includes/functions.php", {
                        cache: false,
                        table: thetab,
                        pa: pai,
                        delattr: pager
                    }, function (data) {
                        $('#hob_list').html(data);
                    });

                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
        $("#dialog2").dialog("open");
    });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-20 23:45:06

我建议首先进行以下更改,以极大地简化问题,减少一个对话框与其他对话框冲突的可能性:

使用几个parameters.

  • Make删除所有重复的代码并将所有代码折叠到单个函数调用中确保您销毁了以前使用的对话框,这样当您创建新对话框时,它将使用您的新数据从头开始创建。

还有几个问题。table:pa:delattr:属性在传递给$.get函数的get对象中的作用是什么?它们不是记录在案的$.get()设置。另外,您的意思是所有三个对话框中都有相同的pa: $('#epa_id').val(),行吗?

下面介绍如何将所有重复的代码折叠到一个通用函数中,并为每个对话框使用唯一ID。我还删除了不需要的局部变量:

代码语言:javascript
复制
$(document).ready(function () {

    function configureDialogClick(parent, child, list, tab, dialogID) {
        $(parent).delegate(child, 'click', function (e) {
            e.preventDefault();
            var pager = $(this).attr("href");
            $(dialogID).dialog({
                autoOpen: false,
                width: 600,
                modal: true,
                buttons: {
                    "Confirm": function () {
                        $(list).html("Loading..");

                        $.get("/_includes/functions.php", {
                            cache: false,
                            table: tab,
                            pa: $('#epa_id').val(),
                            delattr: pager
                        }, function (data) {
                            $(list).html(data);
                        });

                        $(this).dialog("close");
                        $(this).dialog('destroy');
                    },
                    "Cancel": function () {
                        $(this).dialog("close");
                        $(this).dialog('destroy');
                    }
                }
            });
            $(dialogID).dialog("open");
        });
    }

    configureDialogClick("#tabs-3", ".delexp", "#ava_list", "", "#dialog3");
    configureDialogClick("#tabs-5", ".delav", "#hob_list", "availability", "#dialog5");
    configureDialogClick("#tabs-7", ".delhob", "#hob_list", "hobby", "#dialog7");

});

因为我没有办法运行这段代码,所以我不能说这是修复了问题,还是只是朝着正确方向的下一步清理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7131998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档