为什么$(":select").焦点不起作用而$(":input").焦点有效吗?

use*_*660 4 jquery select focus

我有一个JQuery代码,当输入或选择元素获得焦点时,它会执行某些操作.虽然我的输入元素代码有效,但select元素不起作用.

这就是我的工作.

<body>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">


$(document).ready(function(){
   $(":input").focus(function () { //this works
    //do something
   });

   $(":select").focus(function () { //this doesn't
    //do something      
   });
});

</script>
</body>
Run Code Online (Sandbox Code Playgroud)

我在select上尝试了一些变体,例如使用$("select")而不是$(":select"),但是也没有用.

我是JQuery的初学者.

如果你能告诉我如何让它发挥作用我感激不尽.

非常感谢!

Fel*_*ing 6

简短而简单:因为:select不存在.

$('select')将工作,但只有<select>你的代码中有一个元素.你没有上面的代码.

看看选择器列表.

:input相反确实存在:

选择所有输入,textarea,select和按钮元素.


通常:以冒号开头的:选择器是伪选择器.它们由jQuery定义(它们不是有效的CSS选择器)并且选择具有特定状态或属性的元素).

你已经遇到过:input.它选择所有表单控件元素.另一个是例如: visible,其选择所有显示的(可见的)元素.


更新:

<select>元件具有时存在$('select').focus(...被执行.我不知道你正在使用的软件,但如果他们加载元素,例如通过Ajax,那么很可能它们在你的代码执行时还不存在.

  1. 确保<select>页面上有元素.
  2. 您可能必须使用.live():

    $('select').live('focus', function() {
        //stuff
    });
    
    Run Code Online (Sandbox Code Playgroud)