2012-01-13 35 views
6

मैं इसjQuery href और onclick जुदाई

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a> 

func2 सही या गलत रिटर्न की तरह कोड है। फिर, func1 केवल तभी कॉल किया जाता है जब function2 सत्य लौटाता है। सही ?

सीखने jQuery में, मुझे पता चला है कि onclick अच्छा नहीं है और मूल्यह्रास हुआ, तो मैं

<a id="id101" href="javascript:func1();">Link</a> 
jquery 
$("#id101").click(func2() { 
    //same stuffs from before which was in func2 
}); 

के कोड से ऊपर संशोधित अब, मेरी सवाल है:

के बाद क्लिक हैंडलर लिया जाता है की देखभाल, मैं जावास्क्रिप्ट के अंदर जावास्क्रिप्ट के साथ क्या कर सकता हूं? क्या मुझे func1 को func2 में jQuery में क्लिक करना चाहिए func2 के हैंडलर पर क्लिक करें, जब func2 के अंदर की स्थिति सच है? या क्या कुछ सुरुचिपूर्ण समाधान है?

इसके अलावा, एचटीएमएल और इवेंट कोड को अलग करना अच्छा है, लेकिन यहां आईडी id101 के साथ इस तत्व के साथ कई घटनाएं हो सकती हैं, और एक बड़ी फ़ाइल में, कई घटनाओं के साथ कई HTML तत्व हो सकते हैं। इसलिए, जब मेरे पास कई ईवेंट हैंडलर के साथ एक बड़ा पृष्ठ है, तो मैं बेहतर तरीके से कैसे जान सकता हूं कि कौन से एचटीएमएल तत्व में और कितने घटनाएं जुड़े हैं?

अधिक उपरोक्त प्रश्न के रूप में अनुरोध करने के लिए विवरण,

मैं मतलब id101 onclick हो सकता है, onmouseover, onmouseout और कई अन्य तरह की घटनाओं। ऐसे कई ईवेंट हैंडलर के साथ ऐसे कई तत्व हो सकते हैं। मैं उन्हें बेहतर कैसे खोज सकता हूं? पुरानी शैली में, इस तरह के सभी ईवेंट हैंडलर सभी को एक साथ रखा गया है, जैसे

<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a>

मैं यह नहीं कह रहा कि यह अच्छा है, लेकिन कम से कम मैं देख सकता हूं कि यह इस घटना पर है। लेकिन अब जब jquery फ़ाइल में इसे विभाजित करते हैं, तो मुझे id101 के लिए पहली बार इस jquery फ़ाइल को खोजना होगा और फिर इसके साथ जुड़े ईवेंट की जांच करनी होगी, जो HTML तत्वों के साथ समस्या हो सकती है जिसमें कई तत्व और संबंधित ईवेंट हैंडलर हैं। क्या उस जानकारी को खोजने का कोई बेहतर तरीका है?

+0

सब पर "href" में जावास्क्रिप्ट न रखें। ईवेंट हैंडलर में बस (सशर्त रूप से, यदि आप चाहते हैं) ऐसा करें। – Pointy

+0

@endroix: जैसा पॉइंटी ने कहा, बस संपूर्ण 'href' विशेषता को हटा दें। इनलाइन जेएस बुरी खबर है। और, जब आप jQuery चयनकर्ता से जुड़ते हैं, तो आपको आईडी इंगित करने के लिए '#' का उपयोग करना होगा। अभी आपका jQuery शायद कुछ भी नहीं कर रहा है। इसे '$ ("# id101") में बदलें।();' पर क्लिक करें, और उस पूरे 'href =" x "' को हटा दें। – Josh

+0

@ जोश, मैं भूल गया #। अब – newcoderintown

उत्तर

2

हां, मैं आपको func2 के अंदर func1 लिखने की सलाह देता हूं। HTML:

<a id="id101" href="#" >Link</a> 

jQuery

$("#id101").click(func2() { 
    var status = false; 
    //func2 goes here and modifies status value. 
    if (status) { 
     // func1 goes here 
    } else { 
     // in case if status is false. 
    } 

}); 

इसके अलावा मैं क्या आप अपने प्रश्न के दूसरे भाग में मतलब नहीं मिला, आप कृपया अधिक विशिष्ट हो सकता है।

+2

अपडेट किया गया है यदि आप उस jQuery चयनकर्ता को '#' नहीं जोड़ते हैं, तो कुछ भी काम नहीं करेगा ... – Josh

+0

वास्तव में सैद्धांतिक रूप से घटनाओं और हैंडलर पर कोई सीमा नहीं है। बस उनके लिए हैंडलर बनाएं। मुझे लगता है कि आप आईडी के बजाय कक्षाओं का उपयोग कर सकते हैं। यदि ऐसे कई लिंक हैं जिनमें जावास्क्रिप्ट हैंडलर होना चाहिए, तो उन्हें इकट्ठा करने का प्रयास करें। जैसे Link Link 2 'यदि आपको सभी प्रश्नों पर विशिष्ट कार्य करने की आवश्यकता होगी, तो भी मैं आपको एक और विशेषता का उपयोग करने की सलाह देता हूं जो पहचान करेगा कि कौन सा लिंक क्लिक किया गया था। ' Cyberon

+0

के साथ प्राप्त करें और यदि आप नहीं चाहते हैं कि आपका पृष्ठ शीर्ष पर "hopping" लिंक (क्योंकि यह "#" को संदर्भित करता है), आप संभवतः ' लिंक' जैसे कुछ का उपयोग कर सकते हैं। बस इस अवधि को स्टाइल करें कि यह एक लिंक की तरह दिखता है। – odaa

2

सबसे अच्छा मैं आपको बता सकता हूं कि यह "सुगंधित" कोड है - आप इस तरह की जगह पर अपने जावास्क्रिप्ट को नहीं चाहते हैं। मैं आपको कुछ jQuery बुनियादी सिद्धांतों को सीखने और वहां से आगे बढ़ने के लिए कुछ और घंटे बिताने की सलाह दूंगा। मुझे पता है कि यह निराशाजनक हो सकता है, खासकर अगर आप विरासत जावास्क्रिप्ट के साथ काम कर रहे हैं।

+0

मैं इस समय jQuery सीख रहा हूँ। धन्यवाद – newcoderintown

9

यदि मैं सही ढंग से समझता हूं, तो आप इनलाइन जावास्क्रिप्ट से बचना चाहते हैं, लेकिन आप a पर नज़र डालने में सक्षम होना चाहते हैं और जानते हैं कि इसमें कोई घटना है या नहीं। दुर्भाग्यवश, इसे इंगित करने का एक स्वीकार्य तरीका नहीं है, क्योंकि इनलाइन जावास्क्रिप्ट खराब समाचार है। शायद आप अपने भविष्य की पठनीयता की सहायता के लिए अपने तत्व को एक डमी क्लास दे सकते हैं। इसके अलावा, पूरे func1 और func2 चीज़ को भूलें। बस अपने क्लिक बाइंडिंग के अंदर एक अनाम फ़ंक्शन का उपयोग करें।

<a id="some_id" class="optional_has_click">Click Me</a> 

<script type="text/javascript"> 
    $(document).ready(function(){ 

    $("#some_id").click(function(){ 

     // do something 
     alert($(this).attr("id")); 

    }); 

    }); 
</script> 

संपादित करें: इसके अलावा, href हटाने, विज़ुअल संकेत निकाल देंगे ताकि आप उसे a की तरह लग रहे बनाने के लिए अपने डमी क्लास का उपयोग कर सकते हैं।

यहाँ आप के लिए एक बेला है: http://jsfiddle.net/zzTSt/1/

+0

हां, मैं इनलाइन जेएस से बचना चाहता हूं लेकिन 'ए' से जुड़ी घटनाओं को भी देखना चाहता हूं। अगर मुझे कई जगहों पर इस func1 और func2 का उपयोग करना है, तो क्या मैं इसे अनाम कार्य के साथ कर सकता हूं? – newcoderintown

+0

@endroix: बस अज्ञात के अंदर फ़ंक्शन को कॉल करें, जहां मैं अभी चेतावनी दे रहा हूं। – Josh

+0

@endroix: मैंने आपके लिए पहेली को अपडेट किया है। – Josh

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