Jquery 如何将特定的.on选择器传递到函数中

Jquery 如何将特定的.on选择器传递到函数中,jquery,function,selector,Jquery,Function,Selector,我有两个相同代码的版本。第一个版本非常好,但不适用于新加载的内容 // Do some fancy ajax loading and URL rewriting when link is clicked var linkButton = $(".jsHistory a"); linkButton.on("click", function() { // If link is already selected do nothing if($

我有两个相同代码的版本。第一个版本非常好,但不适用于新加载的内容

    // Do some fancy ajax loading and URL rewriting when link is clicked

    var linkButton = $(".jsHistory a");

    linkButton.on("click", function() {
        // If link is already selected do nothing
        if($(this).parent().hasClass("selected")) {
            return false;
        // Else load new content and update URL
        } else {
            linky = $(this).attr("href");
            history.pushState(null, null, linky);
            showActiveLink();
            loadContent(linky);
            return false;
        }
    });
在第二个版本中,我需要所有与单击的特定链接按钮相关的内容,我认为它会起作用。不过,我正在努力让选择器通过

    // Do some fancy ajax loading and URL rewriting when link is clicked

    var linkButton = $(".jsHistory a");

    $(document).on({
        click: function() {
            If link is already selected do nothing
            if($(this).parent().hasClass("selected")) {
                return false;
            // Else load new content and update URL
            } else {
                linky = $(this).attr("href");
                history.pushState(null, null, linky);
                showActiveLink();
                loadContent(linky);
                return false;
            }
        }
    }, linkButton);

有人知道我是如何做到这一点的吗?如果我像我所想的那样接近于做到这一点的话?谢谢你的时间。

快到了。您需要在文档中为新创建的元素调用它,就像在第二个元素中一样,但是还应该将选择器传递给on函数。这样,将只接收来自该选择器的事件,“This”元素将成为链接

$(document).on('click', '.jsHistory a', function(){
    var linkButton = $(this);
    //...
});
似乎
on()
只接受委派事件处理程序的字符串,而不是jQuery对象,因此您必须执行以下操作:

$(document).on({
    click: function() {
        if( !$(this).parent().hasClass("selected") ) {
            var linky = $(this).attr("href");
            history.pushState(null, null, linky);
            showActiveLink();
            loadContent(linky);
        }
        return false;
    }
}, '.jsHistory a');

OP在最后传递选择器,这在使用地图时是正确的。在JSFIDLE上,尝试单击页面上的任意位置。您需要传递选择器而不是查询的元素:没错,您不能像那样将jQuery对象传递给
on()
,只能传递字符串。我以前都没注意到。非常感谢所有的帮助。这个答案解决了我的问题。我想我现在明白了。我会做一点实验,以便将来能理解它。你是最棒的!