我可以使用jQuery将多个单击事件附加到元素吗?

时间:2012-05-23 16:22:26

标签: jquery

我在插件脚本中有以下内容:

$("#menu")
.on('click','a[href^="/Test"]',function(event){

        event.preventDefault();
        var href = $(this).attr('href');

        alert(this);
        // Load content
        $('#content').load(href, '', function (responseText, textStatus, XMLHttpRequest) {
            $(this).applyTemplateSetup().buildTableOfContent();
        });
        window.location.hash = '#' + href;

        // Get nav link
        var a = $('#menu a[href="' + href + '"]');
        if (a.length > 0) {
            // Mark as current
            $('#menu a').removeClass('current');
            a.addClass('current');

            // Update breadcrumb
            var breadcrumb = $('#breadcrumb').empty();
            while (a.length > 0) {
                if (a.get(0).nodeName.toUpperCase() == 'A') {
                    var target = a;
                }
                else {
                    var target = a.parent().find('a:first');
                }
                breadcrumb.prepend('<li><a href="' + target.attr('href') + '">' +
                a.contents().filter(function () {
                    return this.nodeType == 3;
                }).first().text()
                + '</a></li>');

                // Check if opened
                var li = a.parent();
                if (li.hasClass('closed')) {
                    li.removeClass('closed');
                }

                a = li.parent().parent().children('a, span');
            }
        }
    });       

我还想在用户点击时设置链接的值。我加了这个 在我的页面上,但它似乎没有被调用。有什么问题吗? 我将两个相同类型的事件附加到一个元素上?

$("#menu")
            .on('click', 'a[href^="/Test"]', function (event) {
                event.preventDefault();
                var href = $(this).attr('href');
                var pk = href.substr(7, 4);
                var rk = href.substr(12, 4);
                var link = "/Admin/Testss/Edit?pk=" + pk + "&rk=" + rk;
                $('#editLink').data('href', link);
            });

2 个答案:

答案 0 :(得分:1)

是的,它应该有效。确保定义第二个处理程序的代码实际上正在执行。

或者,您可以随时修改附加的第一个处理程序以调用(多个)其他函数。

我个人更喜欢让前者工作,因为它允许你独立地附加/分离处理程序。

如果您使用Bind

,是否会遇到同样的问题?

正如对Q的评论中所提到的,如果任何函数返回false,它将阻止事件冒泡。

答案 1 :(得分:0)

只需将其保留在单击事件中,将其置于一个是多余的