jQuery 在下拉事件中,下拉可见

jQuery on dropdown event, dropdown visible

是否有任何 jQuery 事件在选择框下拉列表为 shown/visible 时捕获?一旦显示下拉列表,我将尝试用值填充选择框。

<select id="foo">
   <option value="">----</option>
   <option selected="selected" value="1"> Option1 </option>                           
   <option value="2"> Option 2 </option>
</select>

//I need something like this
jQuery('#foo:dropdown').on('visible', function(){
  //Do what you need to do
});

我尝试使用 on change,但这不是我要查找的确切事件,因为我试图在实际进行任何选择之前用值填充该框。此外,我不能在单击时使用,因为虽然它通过用值填充选择框来工作,但一旦我做出选择,脚本就会再次调用,并且框会在一个永无止境的圆圈中重置。

问得好,回答起来也很有趣。这可以通过使用 'click' 来完成,是的,我知道每次单击 select 框时它都会继续触发。但是等等,有一个技巧可以解决这个问题,我们可以为此设置一个标志。因此,加载脚本时标志(变量)为 false,您第一次单击 select 时它被设置为 true,脚本将只执行一次。

$(document).ready(function() {
  var first_time = false;
  $('select').on('click', function() {
    if (!first_time) {
      console.log('Yes, here I am!');
      first_time = true;
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option>One</option>
  <option>Two</option>
</select>

基于 Barry 的回答,这是我想出的解决方案。

第一次加载页面时,var 被赋值为 0。单击选择框时,该值立即增加 1。函数然后检查 var 现在是否等于 1,并且如果是,则表示下拉菜单已打开,并且函数已触发。完成需要完成的操作后,该值将减少 2(新值 -1)。这样一来,当您在选择框中做出选择(再次单击)时,您只想在显示选择框时执行的任何操作都不会再次触发。但是,它会在您下次单击时触发,因为该值将再次等于 1。起身重复。

$(document).ready(function() {
    var aa = 0;
    $('#foo').on('click', function () {  
      aa++;      
      if (aa == 1) { //Basically, is dropdown open?
        //Do what you need to do when dropdown is open
        aa = -1; //Now assign new value to aa
      }         
    });  
 );