2011-09-26 11 views
32

तो शायद मैं सिर्फ सही स्थानों में नहीं देख रहा हूँ, लेकिन मैं कैसे सादे पुराने जावास्क्रिप्ट में jQuery केjQuery के वेनिला जावास्क्रिप्ट संस्करण .click

$('a').click(function(){ 
    // code here 
}); 

के बराबर करने के लिए की एक अच्छी व्याख्या नहीं मिल सकता है ?

मूल रूप से मैं a टैग पर क्लिक करने पर हर बार एक फ़ंक्शन चलाने के लिए चाहता हूं लेकिन मेरे पास ऊपर दिए गए तरीके से इसे करने के लिए jQuery में लोड करने की क्षमता नहीं है इसलिए मुझे यह जानने की ज़रूरत है कि इसे सादे का उपयोग करके कैसे किया जाए जावास्क्रिप्ट।

उत्तर

39

कार्य उदाहरण: http://jsfiddle.net/6ZNws/

एचटीएमएल

<a href="something">CLick Here</a> 
<a href="something">CLick Here</a> 
<a href="something">CLick Here</a> 

जावास्क्रिप्ट:

var anchors = document.getElementsByTagName('a'); 
for(var z = 0; z < anchors.length; z++) { 
    var elem = anchors[z]; 
    elem.onclick = function() { 
     alert("hello"); 
     return false; 
    }; 
} 
+1

+1 मैं आपको एक समारोह के साथ * अभिव्यक्ति * को समाप्त करने की सलाह दूंगा; – pimvdb

+0

अच्छा पकड़ कौन है। –

+0

मैं असहमत हूं। IMHO आप पिछले बाध्य समारोह को नष्ट कर सकते हैं। "AddEventListener" का उपयोग करने के लिए मुझे लगता है कि कहीं बेहतर है। –

5

ये रहा:

[].forEach.call(document.querySelectorAll('a'), function (a) { 
    a.addEventListener('click', function() { 
     // code here 
    }, false); 
}); 

लाइव डेमो:http://jsfiddle.net/8Lvzc/3/

(IE8 में काम नहीं करता है)

इसके अलावा, मैं घटना प्रतिनिधिमंडल की सलाह देते हैं ...

+2

क्या आपके पास '[] .forEach.call (...)' का उपयोग न करने का कोई कारण है? – pimvdb

+0

@pimvdb ठीक है, 'कॉल' उपयुक्त नहीं है क्योंकि फ़ंक्शन को 'प्रत्येक के लिए' में पास किया जाना है। किसी को 'आवेदन' का उपयोग करना होगा, इसलिए: '[] .forEach.apply (..., [function() {}]); '। '[फ़ंक्शन() {}] 'नोटेशन मेरे स्वाद के लिए अजीब बात है ... –

+3

मेरा मतलब है http://jsfiddle.net/8Lvzc/1/। – pimvdb

30
element.addEventListener('click', function() { ... }, false); 

आपको तत्वों को ढूंढना होगा डी प्रत्येक को हुक करने के लिए एक लूप बनाते हैं।

6
document.getElementById('elementID').onclick = function(){ 
     //click me function! 
} 
+0

आह ... ने ध्यान दिया होगा कि मैं 'ए' टैग या आईडी को पहले से नहीं जानता था, इसलिए बस "किसी भी टैग के लिए क्लिक किया गया ....." –

1

यह हर a तत्व को एक onclick समारोह आवंटित करेगा।

var links = document.getElementsByTagName("a"); 
var linkClick = function() { 
    //code here 
}; 

for(var i = 0; i < links.length; i++){ 
    links[i].onclick = linkClick; 
} 

आप इसे here कार्रवाई में देख सकते हैं।

11

निम्नलिखित

var clickHandler = function() { 
    // Your click handler 
}; 

var anchors = document.getElementsByTagName("a"); 
for (var i = 0; i < anchors.length; i++) { 
    var current = anchors[i]; 
    current.addEventListener('click', clickHandler, false); 
} 

नोट का प्रयास करें: के रूप में Ӫ _._ Ӫ ने बताया इस IE8 पर कम यह addEventListener का समर्थन नहीं करता के रूप में काम नहीं करेगा और।

IE8 पर आप onclick की सदस्यता लेने के लिए निम्न का उपयोग कर सकते हैं। यह एक आदर्श विकल्प नहीं है के रूप में यह हर किसी की आवश्यकता सहकारी होने के लिए, लेकिन यह आपकी सहायता करने में सक्षम हो सकता

var subscribeToOnClick = function(element) { 
    if (element.onclick === undefined) { 
    element.onclick = clickHandler; 
    } else { 
    var saved = element.onclick; 
    element.onclick = function() { 
     saved.apply(this, arguments); 
     clickHandler.apply(this, arguments); 
    } 
    } 
} 

for (var i = 0; i < anchors.length; i++) { 
    var current = anchors[i]; 
    subscribeToOnClick(current); 
} 
+2

लूप के अंदर फ़ंक्शंस न बनाएं। लूप के बाहर फ़ंक्शन बनाने और लूप के अंदर फ़ंक्शन को संदर्भित करना बेहतर है। –

+0

@ पीटर ओलसन मुख्य रूप से मैं मूल प्रश्न की शैली को दोहराने की कोशिश कर रहा था।मैं इसे – JaredPar

+0

में अधिक सही होने के लिए अपडेट कर दूंगा शायद यह ध्यान दिया जाना चाहिए कि IE8 और निचले 'addEventListener' का समर्थन नहीं करते हैं। – user113716

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