带有动态选择器的jquery .on()不起作用

时间:2014-02-18 16:55:58

标签: jquery

使用.on()和动态选择器时遇到一些问题。例如:

$("#listPlayerHome").on('click', '.classeJoueurEngland', function(){ //My work here }

......工作正常。但是,如果我使用这样的动态选择器:

$("#listPlayerHome").on('click', '.classeJoueur'+teamHome, function()

如果“teamHome”包含“英格兰”,则根本不起作用。

3 个答案:

答案 0 :(得分:2)

它确实有效,但只有在调用.on方法时才会发生一次。如果您希望在更改变量时神奇地改变它,那么这种情况就不会发生。

如果你需要它是动态的,那么你应该在需要更改变量值时重新绑定。

假设您只希望它绑定当前值,并忘记以前的值,您可以这样做:

var oldTeamHome;
function attachHandler(teamHome){
    if(oldTeamHome)
        $("#listPlayerHome").off('click', '.classeJoueur'+oldTeamHome, eventFunction);
    $("#listPlayerHome").on('click', '.classeJoueur'+teamHome, eventFunction);
    oldTeamHome = teamHome;
}

function eventFunction(){
    //...
}

这样,无论你通常在哪里更改teamHome值,都可以使用它:

//teamHome = "England";
attachHandler("England");

如果有可能这不是你想要的,那它确实不起作用。那是因为你做错了别的事。在这种情况下,您需要提供一整套可以复制问题的代码。

答案 1 :(得分:0)

它应该有用,但你提到teamHome 包含英格兰 - 也许它事先有空间?所以也许试试:

$("#listPlayerHome").on('click', '.classeJoueur' + teamHome.trim(), function()

答案 2 :(得分:0)

这不是您的方法的精确解决方案,而是另一种查看问题的方法。

您可以尝试使用Attribute Starts with Selector。这会将事件绑定附加到任何带有以“classeJoueur”开头的类的子元素。

$('#listPlayerHome').children('*[class^="classeJoueur"]').on('click', function () { });