2010-10-30 100 views
10

我通過onclick屬性調用元素本身的函數,因爲我需要php動態地給函數參數中的一個值賦值。當我嘗試通過「$(this)」引用函數中的調用元素時,它最終引用整個窗口而不是元素。我該如何解決?Jquery:選擇調用函數的元素

+2

這是一個很好的問題,雖然提供的答案提出了一些解決方法,但它們都沒有解決原始問題。我也想知道答案。爲什麼他得到$(this)的窗口,而不是點擊元素? – 2011-06-05 22:07:14

回答

6

我懷疑你真的需要使用內聯onclick屬性。您可以以各種不同的方式將數據存儲在元素中。如果不知道你需要傳遞的參數是什麼,很難說你會怎麼做,但我會舉幾個例子。

最靈活的很可能是在data-屬性:

<a href="#" id="subject" data-type="fiction">Text</a> 

然後,您可以訪問下列方式中的信息:

$(document).ready(function(){ 
    $('#subject').click(function(){ 
     $type = $(this).data('type'); // this works as of jQuery 1.4.3, otherwise $(this).attr('data-type'); 

     // do your handling here, using $type 
    }); 
}); 

你也可以做到這一點使用類,腳本標籤創建全局變量,各種方法。這幾乎肯定會比將jQuery處理程序放在onclick屬性中更好。

19

嘗試你的元素髮送作爲參數傳遞給你的函數那樣:

<input type="text" onclick="myfunction(this);"></input> 

你的功能應該是:

<script> 
    function myfunction(currentElement){ 
    // ... 
    } 
</script> 
4

的解決方案是存儲在自定義屬性的動態值,不是一個onclick處理程序。 HTML規範將任何以「data-」開頭的屬性定義爲像這樣的自定義數據,並且它在規範中,因此它將進行驗證。所以,你可以做這樣的事情(使用PHP的例子,相應調整):

<input type="text" id="some-input" data-some-dynamic="<?php echo $something; ?>"> 

然後在JavaScript檢索像這樣:

$(document).ready(function() { 
    $('#some-input').click(function() { 
    // $(this) -- is the input element 
    // $(this).attr('some-dynamic-attribute') -- contains the dynamic data you need 
    }); 
}); 

我覺得這個方法優於使用屬性處理程序就像onclick =「」一樣簡單,因爲從設計的角度來看它更堅固;分離問題和所有這些。

+0

感謝您深思熟慮的答案。雖然不一定是我需要的,但一個非常有趣的方法。 – 2010-10-30 08:35:46

+0

艾倫 - 這個答案和寂寞天給你的另一個選擇一樣。 – 2010-10-30 08:37:11

+0

這個答案最初有兩種選擇,但是現在所有現代瀏覽器都支持HTML5,所以我已經更新了答案,只包含「data-X」解決方案。 – 2011-06-08 15:44:40