jQuery类选择器在类更改后不选择

Posted

技术标签:

【中文标题】jQuery类选择器在类更改后不选择【英文标题】:jQuery class selector not selecting after class change 【发布时间】:2014-01-19 09:16:46 【问题描述】:

我正在使用 javascript 构建一个按钮点击和益智冒险游戏。游戏将允许一系列按钮命令。当点击“go”命令时,按钮变为不同的退出,类变为退出,如下所示:

function setExitButtons()
    clearButtons();
    for (var i = 0; i < player.currentRoom.exits.length; i++) 
            var buttoni = button[i];
            buttoni.className = "exit";
            buttoni.innerhtml = player.currentRoom.exits[i].name;
            $(buttoni).show();
    


clearButtons 隐藏所有按钮,因此只显示正确的按钮,而 button[] 是按钮的节点列表。

调用此函数时,类确实发生了变化。

然后我有另一个带有类选择器的 jquery 函数,如下所示:

$(".exit").click(function()
          //roomchangefunction
);

当单击带有退出类的按钮时,.exit 功能不会被激活。我有一个包含整个部分的文档就绪功能。想法?

【问题讨论】:

您在页面加载后添加类名,因此需要将.on() 与委托事件一起使用。已经回答了很多次了,这里不需要再发了。 在添加.click 处理程序时,按钮(事件的条件)不存在。您需要在始终存在的父元素上使用.on,以便事件可以冒泡并被捕获。 【参考方案1】:

这只会在文档加载时运行一次:

$(".exit").click(function()
    //roomchangefunction
);

当时,.exit 没有匹配的元素。所以没有分配点击处理程序。之后,它就再也不会运行了。

由于元素是动态变化的,我建议将点击处理程序绑定到公共父元素using .on() instead。像这样的:

$(document).on('click', '.exit', function () 
    //roomchangefunction
);

不同之处在于点击事件实际上分配给了一个共同的父元素(在本例中为document,尽管任何共同的父元素都可以工作,例如始终包含.exit 元素的div)。当一个元素被点击时,“click”事件发生在那个元素上,并一直向上到 DOM。所以这个处理程序将被调用。第二个参数是一个过滤器,因此它会在调用处理函数时查找与该过滤器匹配的元素。

这样.exit 的过滤器会在单击元素时发生,而不是在加载文档时发生,因此在文档生命周期内动态更改的元素仍会被处理。

【讨论】:

有没有办法引用哪个带有退出类的按钮被点击了?最初我使用 $(this) 但现在引用了文档。 @kahjav:你确定引用document?看看这个例子:jsfiddle.net/uTP9R this 引用的是发起点击事件的元素,而不是拥有处理程序的元素。 它没有引用按钮,但我只是使用了 event.target,一切都很好。【参考方案2】:

您在页面加载后添加类名,因此需要将 .on() 与委托事件一起使用。基本上这意味着,事件绑定到父级(在本例中为document),但会影响指定的子级(在本例中为.exit)。

$(document).on('click', '.exit', function()
          //roomchangefunction
);

【讨论】:

【参考方案3】:

你需要像这样使用.on()

$(".exit").on("click", function()
          //roomchangefunction
);

【讨论】:

这也有同样的问题,.exit 分配处理程序时不存在。 哦,是的,谢谢,我明白了,..$(document).on('click', '.exit', function () 。你说的对。 :)

以上是关于jQuery类选择器在类更改后不选择的主要内容,如果未能解决你的问题,请参考以下文章

浓缩咖啡:为啥旋转器在选择后不关闭?

jquery 1.8 类选择器在 Firefox 中不起作用

jQuery 选择器在 php if 语句中捕获类

CSS/JQuery 选择器:有没有在类中选择类?

回发后jquery datepicker不起作用

为啥 jQuery 选择器在这里不起作用?