2011-02-15 172 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 
}); 
相關問題