2011-02-15 60 views
4

我有一个JQuery代码,它在输入或选择元素获得焦点时执行某些操作。 虽然我的输入元素的代码工作,选择元素不起作用。

这就是我所做的。

<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> 

我试着选择一些变化,如使用$(“选择”),而不是$(“:选择”), 但也不能工作。

我是JQuery的初学者。

我很感激你是否能告诉我如何让它工作。

非常感谢!

回答

6

简而言之:因为:select不存在。

$('select') will work,但前提是您的代码中有<select>元素。你没有在你的上面的代码。

看看list of selectors

:input instead does exist

选择所有输入,文本区域,选择和按钮元件。


一般来说:开始用冒号:选择器是伪选择。它们是由jQuery定义的(它们不是有效的CSS选择器),并选择具有特定状态或属性的元素。您已经遇到:input。它选择所有表单控件元素。另一个例如是: visible,其选择所有显示(可见)元素。


更新:当执行$('select').focus(...

<select>元件必须存在。我不知道您使用的软件,但是如果它们加载了这些元素,例如通过Ajax,那么当你的代码被执行时,它们很可能还不存在。

  1. 确保页面上有<select>元素。
  2. 您可能需要使用.live()

    $('select').live('focus', function() { 
        //stuff 
    }); 
    
+0

谢谢菲利克斯!那么,当我清理我的代码,只专注于此功能,$(“选择”)。焦点工作。 (你的“.live”代码也起作用)也许在我的代码的其他部分有一些问题。非常感谢! – user605660 2011-02-15 07:47:31

+0

@ user605660:Your're welcome :)只有在必要时才使用`live()`。如果其他作品:完美。快乐的编码! – 2011-02-15 07:49:03

0

$(“:select”)不是有效的选择器。 http://api.jquery.com/category/selectors/

+0

感谢瑞。是的,我怀疑这一点。我试过$(“选择”),但这没有奏效。这也是无效的吗?我想要的不是$(“:selected”)。 (据我所知,这与选项更相关)你能告诉我什么是有效的吗? – user605660 2011-02-15 07:12:58

1

没有一个:选择选择,但由于“选择”是HTML自己的标签,你可以使用$('选择')(比如你可以使用$('body'))。更好的方法可能是为你的“select”元素分配一个“id”,然后使用$('#id')直接选择该元素。

+0

谢谢克里斯。我想过使用#id,但在这里,我希望为每个select元素调用该函数。所以,应该$(“选择”)工作?也许这是行不通的,因为我在Qualtrics(在线调查工具,如surveyMonkey)中使用此代码。 – user605660 2011-02-15 07:15:42

0

您应该避免使用:input:select alone。这是一个性能杀手,特别是如果你有DOM中的元素分配。 :输入意味着jQuery必须搜索DOM中的每个元素来查找输入。下面的选择器分配更快,更高效。

$( '#myForm的')。找到( '输入')

检查性能测试(75%的速度)http://jsperf.com/input-selector-performance0

这样你就可以基本上做到

$('#myform').delegate('select','focus', function() { 
    // what ever you want to do here 
}); 
相关问题