2010-10-02 8 views
11

मेरे पास कुछ HTML है जो onclick विशेषता के साथ है। मैं jQuery का उपयोग कर उस विशेषता को ओवरराइड करना चाहता हूं। JQuery का उपयोग कर क्लिक हैंडलर को हटाने का कोई तरीका है? unbind doesn't work का उपयोग करना।क्या मैं jQuery का उपयोग कर इनलाइन ईवेंट हैंडलर को हटा सकता हूं?

$(function() { 
    $('a').removeAttr('onclick'); 
}); 

jsfiddle demo:

+0

मुझे लगता है कि, एक बड़ी साइट के लिए यह बोझल हो सकता है किया जा सकता है, लेकिन यह (डाउनलोड कोड बैंडविड्थ के संदर्भ में और हल्का) आसान नहीं होगा नोटपैड का उपयोग करने/'ऑनक्लिक' (या ऑनक्लिक) के सभी उदाहरण ढूंढने के लिए टेक्स्टमैट/जीएडिट (या कोई अन्य टेक्स्ट एडिटर) और बस उन्हें पूरी तरह हटा दें? –

+0

@ डेविड - मैं रेल 2 द्वारा उत्पन्न इनलाइन बकवास से निपट रहा हूं। एक बार जब मैंने रेल 3 पर अपलोड किया है तो मुझे यह समस्या नहीं होगी, क्योंकि उन्होंने सभी जावास्क्रिप्ट को अविभाज्य बना दिया है। – Skilldrick

+0

... मैं रेल को बर्खास्त नहीं कर सकता (मैंने अभी तक इसके साथ वास्तव में कभी नहीं खेला है) लेकिन 'इनलाइन बकवास' की अपनी पीढ़ी के जवाब में मैं केवल * ewwwwww * कह सकता हूं ... –

उत्तर

19

.removeAttr() समारोह की कोशिश करो।

एक बार जब आप onclick विशेषता से छुटकारा पा लेते हैं तो आप अपना खुद का क्लिक हैंडलर संलग्न कर सकते हैं।

+0

बिल्कुल सही! धन्यवाद। – Skilldrick

+0

मेरे पास टैग ऑनक्लिक = "document.setLang {{lang.1}} पर जेएस इनलाइन कोड है। सबमिट करें(); झूठी वापसी;" एक फॉर्म सबमिट करना लेकिन जैसा कि आपने उल्लेख किया है, मैं फॉर्म सबमिट करना बंद नहीं कर सकता ... – ratata

8
$("#theElement")[0].onclick = function() { 
    whatever(); 
}; 
// -- or -- 
$("#theElement")[0].onclick = null; 

ऐसा नहीं है कि jQuery मानक डोम फ़ंक्शंस और गुणों को दूर कर देगा। ;-)

+1

आप सही हैं, लेकिन jQuery कार्यों के बारे में अच्छी बात यह है कि वे सभी तत्वों पर लागू होते हैं, इसलिए मैं बिना मिलान किए सभी मिलान तत्वों पर क्लिक कर सकता हूं उन पर लूटा। – Skilldrick

+0

@ स्किलड्रिक: तकनीकी रूप से, 'removeAttr() 'एक लूप भी है। लेकिन मैं मानता हूं कि यह अधिक सुविधाजनक है कि लूप को स्वयं लिखना। – Tomalak

0

इसके लिए एक प्लगइन है, लेकिन आपको केवल तब ही ऐसा करना चाहिए जब आपको वास्तव में आवश्यकता हो। प्लगइन आपको पुराने फ़ंक्शन को कॉल करने या पूरी तरह से अनदेखा करने का विकल्प देता है।

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...)); 
0

की कोशिश की लेकिन दिए गए विकल्पों में आंशिक रूप से काम किया है क्योंकि वे एक नहीं बल्कि सभी को हटा दिया।

इसके बजाय मैंने कामकाज के रूप में श्रृंखला का पालन करने की कोशिश की। मैं ver 1.4.2 का उपयोग कर रहा हूँ।

jQuery(“selector”) 
    .removeAttr("onclick").removeAttr("onmouseout").removeAttr("onmouseover"); 
2

http://api.jquery.com/prop/ में उद्धृत .removeAttr() का उपयोग कर इंटरनेट एक्सप्लोरर 8, 9 और 11 में वांछित प्रभाव को प्राप्त नहीं करता है संभावित समस्याओं से बचने के लिए एक इनलाइन ऑनक्लिक ईवेंट हैंडलर निकाल रहा है, .prop() का उपयोग करने के बजाय।

तो इस रूप में

$(function() { 
    $('a').prop('onclick', false); 
});