2009-05-06 7 views
16
<a onclick ="foo()" href="bar.html" >Link </a> 

<script> 

... 
function foo(){ 
    //I want to know the href property of whoever called me. 
    //something like this.caller.href ?? 
} 

</script> 

मुझे लगता है कि मैं केवल सभी तत्व आईडी असाइन कर सकता हूं और फिर जेएस विधि में अपनी आईडी भेज सकता हूं, लेकिन मैं एक बेहतर तरीका ढूंढ रहा था।क्या मुझे जावास्क्रिप्ट विधि से पता चल सकता है, जो DOM तत्व ने मुझे बुलाया?

उत्तर

0

कोई तर्क पारित करने के बारे में कैसे?

foo(id); 
11
<a onclick="foo(this)" href="bar.html">Link</a> 

फिर अपने जावास्क्रिप्ट होगा:

function foo(ob) { 
    alert(ob.href); //or whatever you want to happen preferably pass an id 
} 

उपयोग "इस" चयनकर्ता यदि आप कार्य करने के लिए वस्तु ही पास करना चाहते हैं।

1

आप कार्य करने के लिए href विशेषता के मान जब यह कहा जाता है गुजारें सकता:

<a href="http://www.example.com" onclick="foo(this.href)">link</a> 
20

जब ब्राउज़र एक डोम घटना के परिणाम के रूप में एक समारोह कॉल, जावास्क्रिप्ट कि कार्य करने के लिए एक वस्तु से गुजरता है जो घटना के बारे में जानकारी शामिल है। लेकिन यह दूसरों की तुलना में आईई में थोड़ा अलग काम करता है। सभी ब्राउज़रों में काम करने के लिए, foo() एक तर्क * (मैं e का उपयोग करें) लेना चाहिए:

function foo(e) { 
    var sender = (e && e.target) || (window.event && window.event.srcElement); 
    //sender is the DOM element which was clicked 
    alert(sender.href); //assumes the clicked element was an <a> 
} 

पहली पंक्ति "प्रेषक" तत्व है जो सभी ब्राउज़रों में घटना की उत्पत्ति का मूल्य प्रदान करेंगे।

अब, अगर आपके <a>और में से एक (उदाहरण के लिए, एक छवि के लिए) बच्चे तत्व शामिल हैं उन वास्तविक तत्व क्लिक करें, फिर उस तत्व "प्रेषक" बन जाएगा था। यदि यह एक संभावना है, आप जब तक आप अपने लिंक मिल प्रेषक से डोम ऊपर चलने के लिए की जरूरत है:

function foo(e) { 
    var sender = (e && e.target) || (window.event && window.event.srcElement); 
    //sender is the DOM element which was clicked 

    var myEle = sender; 

    //find the parent node until we hit the <a> 
    while(myEle.tagName.toUpperCase() != 'A') { 
    myEle = myEle.parentNode; 
    } 

    //myEle is now the <a>. sender is still the originator. 
    alert(myEle.href); 
} 

* आप भी कार्य करने के लिए पारित किसी भी तर्क का उपयोग कर सकते, भले ही वे घोषित नहीं कर रहे हैं, का उपयोग करके arguments[] सरणी।

+1

मैं tirnary से अधिक को शॉर्ट पसंद कभी कभी, अपने आप को ||: यह एक ठीक करने के लिए मूल संदर्भ के लिए समारोह कॉल बाध्य कर सकते हैं ई।लक्षित कर; – Tracker1

+0

@cresentfresh onclick अर्थात् गलत और अत्यंत लचीला है। प्रगतिशील वृद्धि तकनीक देखें। –

2

सम्मेलन यहां कि इस कि हैंडलर पर शुरू हो जाती है डोम तत्व को संदर्भित करता है। तो अगर आप लिंक के href जानना चाहता हूँ:

function foo() { 
    // Inside foo this will refer to the DOM element if called as an event handler 
    var href = this.href 
} 

कि चाल करना चाहिए।

संपादित करें: foo एक onclick-हैंडलर डोम में स्पष्ट रूप से कहा जाता है, यानि कि

<a [...] onclick="foo()"> 

तो इस की मूल संदर्भ foo के अंदर खो जाएगा। ... वर इस = (window.event && window.event.srcElement)

<a [...] onclick="foo.call(this)"> 
+0

नहीं।

संबंधित मुद्दे