2013-02-13 67 views
0
/* get every click event on input tags and send it to foo */ 
$('input').click(function() { 
    foo($(this)); 
}); 

function foo(obj) { 
/* do something with obj.. */ 
} 

與上面的代碼,我將有一個輸入對象傳遞到函數foo作爲參數obj。 我應該如何使用obj?我是否需要重新運行選擇器,如$(obj)以使用所有jQuery特定的方法?如何在範圍之外使用jquery選定的對象?

還有一些問題:回答說我沒有必要再用$()包裝obj。如果我用$(obj)重新包裝obj會發生什麼情況? (假設函數foo可以同時採用jquery選擇的對象和非jquery選擇的對象)

回答

1

您正在傳遞jQuery對象,因此不需要再次包裝$()

你試過在foo函數裏面運行jQuery函數嗎?

$('input').click(function() { 
    foo($(this)); 
}); 

function foo(obj) { 
    console.log(obj.val()); //should print the value in the console. 
} 

一些問題:回答說,我有沒有必要換OBJ與$()一次。如果我用$(obj)重新包裝obj會發生什麼? (假設函數foo可以採取兩種jQuery的選擇對象和非jQuery的選擇對象)

你可以簡單地做obj[0]來獲得原始this對象。

+0

正確。用'$()'選擇器包裝一個jQuery對象不會有什麼壞處。如果你正在編寫一個可以接受任何對象類型的插件,那麼用jQuery選擇器來包裝它是個好主意。 – 2013-02-13 16:25:29

+0

@ ChrisBarr,維加謝謝。它應該在IE中造成危害嗎? – thkang 2013-02-13 16:26:30

+0

@thkang它不應該造成任何困難。 – 2013-02-13 16:27:24

1

不。如果它是一個jQuery對象,那麼您可以使用jQuery方法而不用$再次引用它。

1

不,你正在傳遞一個jQuery對象,所以不需要重新包裝。但是,由於jQuery的事件處理程序回調要素分配爲this,你可以清潔這樣寫:

$('input').click(foo); 

function foo() { 
    /* do something with this.. */ 
} 
0

沒有,你可以再次使用該對象從它的參考,沒有必要重新選擇。