Javascript .change()方法存在可见的选择器问题

Javascript .change()方法存在可见的选择器问题,javascript,jquery,Javascript,Jquery,我正在尝试为所有可见的select元素创建一个更改方法 $('.select_elements:visible').change(function() { // function )}; 当我更改select元素时,上面的代码似乎没有运行。然而,如果我写这篇文章,它似乎是有效的 $('.select_elements').change(function() { if ($(this).is(':visible')) { // function } )}; 有人能解释一下吗

我正在尝试为所有可见的select元素创建一个更改方法

$('.select_elements:visible').change(function() {
  // function
)};
当我更改
select
元素时,上面的代码似乎没有运行。然而,如果我写这篇文章,它似乎是有效的

$('.select_elements').change(function() {
  if ($(this).is(':visible')) {
    // function
  }
)};

有人能解释一下吗?它浪费了我生命中的数年(数小时)…

不同的是,第一个版本(其中
:visible
位于选择器中)只将
更改
事件处理程序附加到
选择
元素,当页面加载时,这些元素在DOM中可见


后一个版本将事件处理程序附加到所有
select
元素,然后在触发事件时检查它们的可见性。

Rory McCrossan的回答是对发生的事情的极好解释。我的回答是提出一个比检查变更处理程序中元素的可见性更高效(至少在我看来)的惯用解决方案

$(document).on('change', '.select_elements:visible', function () {
   // ...
});

这种方法只向文档附加一个更改处理程序(您可以将其传递给.select\u元素的任何父元素),只要更改的元素与第二个参数中的选择器匹配,就会触发该处理程序。由于该选择器针对每个更改事件进行求值,因此它还将针对定义处理程序时不可见的可见元素激发。我确信您已经阅读了此内容,但有一些规则确定如何计算和元素。请同时发布不起作用的html示例。看起来有输入错误?不肯定。最后一行应该是});谢谢这就是我开始设想的。谢谢你的澄清!我可能最终会使用这种干净的方法。谢谢