使用.on()和动态选择器时遇到一些问题。例如:
$("#listPlayerHome").on('click', '.classeJoueurEngland', function(){
//My work here
}
......工作正常。但是,如果我使用这样的动态选择器:
$("#listPlayerHome").on('click', '.classeJoueur'+teamHome, function()
如果“teamHome”包含“英格兰”,则根本不起作用。
答案 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 () { });