Javascript jQuery上的下拉事件,下拉可见

Javascript jQuery上的下拉事件,下拉可见,javascript,jquery,events,show,dropdown,Javascript,Jquery,Events,Show,Dropdown,当selectbox下拉列表显示/可见时,是否有任何jQuery事件捕获?我试图在显示下拉列表后用值填充selectbox <select id="foo"> <option value="">----</option> <option selected="selected" value="1"> Option1 </option> <option value

当selectbox下拉列表显示/可见时,是否有任何jQuery事件捕获?我试图在显示下拉列表后用值填充selectbox

<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
});

----
选择1
选择2
//我需要这样的东西
jQuery(“#foo:dropdown”).on('visible',function(){
//做你需要做的事
});

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

这是一个好问题,回答一个有趣的问题。这可以通过使用“单击”来完成,是的,我知道每次单击“选择”框时,它都会持续触发。但是等等,有一个技巧可以解决这个问题,我们可以为此设置一个标志。因此,在加载脚本时,该标志(变量)为false,并且在您第一次单击“选择”时,该标志将设置为true,脚本将只执行一次

$(文档).ready(函数(){
var first_time=false;
$('select')。在('click',function()上{
如果(!第一次){
log('是的,我在这里!');
第一次=真;
}
});
});

一个
两个

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

$(文档).ready(函数(){
var first_time=false;
$('select')。在('click',function()上{
如果(!第一次){
log('是的,我在这里!');
第一次=真;
}
});
});

一个
两个

基于巴里的答案,这就是我提出的解决方案

第一次加载页面时,将为var分配一个值0。单击selectbox时,该值立即增加1。然后,该函数检查var现在是否等于1,如果等于,则表示下拉列表已打开,函数将启动。完成需要完成的操作后,该值将减少2(新值为-1)。这样,当您在selectbox中进行选择(再次单击)时,您只想在显示selectbox时执行的任何操作都不会再次触发。但是,它将在您下次单击它时激发,因为该值将再次等于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
      }         
    });  
 );

基于巴里的答案,这就是我提出的解决方案

第一次加载页面时,将为var分配一个值0。单击selectbox时,该值立即增加1。然后,该函数检查var现在是否等于1,如果等于,则表示下拉列表已打开,函数将启动。完成需要完成的操作后,该值将减少2(新值为-1)。这样,当您在selectbox中进行选择(再次单击)时,您只想在显示selectbox时执行的任何操作都不会再次触发。但是,它将在您下次单击它时激发,因为该值将再次等于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
      }         
    });  
 );


除了使用
focus
之外,
没有此类事件。为什么它以前不会被填充?这似乎是个不寻常的要求。你想解决什么更高级别的问题?@charlietfl我有一个country-state-city api,根据特定选择自动填充。我可以很容易地让它在页面加载时进行填充,但这不是我正在寻找的解决方案。通常,依赖
的更改将用于填充链中的下一个,如果需要,还可以触发页面加载的更改,这就是它的设置方式。问题在于,这些值是为用户保存的,我不知道每次加载pageboy时都会触发该功能,因为这样,用户拥有的值只需加载页面即可被删除。这可以通过更传统的方式轻松解决,例如加载选项前存储值。为
提供一个警告,除了使用
焦点
外,没有此类事件。为什么它以前不会被填充?这似乎是个不寻常的要求。你想解决什么更高级别的问题?@charlietfl我有一个country-state-city api,根据特定选择自动填充。我可以很容易地让它在页面加载时进行填充,但这不是我正在寻找的解决方案。通常,依赖
的更改将用于填充链中的下一个,如果需要,还可以触发页面加载的更改,这就是它的设置方式。问题在于,这些值是为用户保存的,我不知道每次加载pageboy时都会触发该功能,因为这样,用户拥有的值只需加载页面即可被删除。这可以通过更传统的方式轻松解决,例如加载选项前存储值。如果用户需要再次使用,该怎么办<代码>单击
不能很好地协同工作。请注意,
focus
可能比使用click更好。问题是它被多次调用,所以这就是解决方案。当然,在需要时,可以再次将标志设置为false。老实说,我想不出在点击“选择”时会填充复选框的场景。嗨,巴里。谢谢你的建议,但是charlietfl实际上是对的,我需要能够反复点击它“注意,关注可能比点击更好”,我不同意这一点。当用户使用tab并选择select元素时,Focus也会触发,但它不会打开selectbox