2012-03-29 8 views
8

मैं इस तरह एक div है:JQuery: एक क्लिक किए गए तत्व की पेरेंट तत्व आईडी प्राप्त

<div id="popupDiv1" class="popupDivClass"> 
    <a id="popupDivClose" class="popupCloseClass">x</a> 
</div> 

जब मैं 'एक्स' पर क्लिक करें (मैं disablePopup(id); नामक एक jQuery समारोह चलाना चाहते हैं जहां आईडी है coresponding popupDiv की आईडी (मैं ऐसा करने के लिए कई अपने आप X बटन के साथ प्रत्येक popupDiv है।

मैं कार्यान्वित निम्नलिखित

$(".popupCloseClass").click(function (event) { 
    var buttonID = $(event.target).attr("id"); 
    var id = $(buttonID).closest("div").attr("id"); 
disablePopup(id); 
}); 

मूल रूप से मैं popupCloseCl की आईडी मिल गधे पर क्लिक किया गया तो मुझे निकटतम विधि के माध्यम से इसके माता-पिता (संबंधित पॉपअपडिव) की आईडी मिलती है। तो मैं अक्षम पॉपअप कॉल करता हूँ।

लेकिन यह काम नहीं कर रहा है।

मैंने var buttonID = $(buttonID).parent().attr("id"); विधि का उपयोग करने का भी प्रयास किया लेकिन यह भी काम नहीं किया।

मैं भी कोशिश की var id = this.id;

किसी भी मदद की बहुत सराहना कर रहा है

धन्यवाद

+0

'buttonID' स्ट्रिंग' "popupDivClose" 'शामिल होंगे। यदि आप इसे jQuery पर पास करते हैं, तो यह ** टैग नाम ** 'popupDivClose' वाले सभी तत्वों की खोज करेगा। आईडी चयनकर्ता '#' से शुरू होते हैं। लेकिन चूंकि 'event.target' (या यहां तक ​​कि' यह') पहले से ही आपके इच्छित तत्व को इंगित करता है, बस '$ (event.target) .closest (...) ... 'या' $ (this) .closest का उपयोग करें (...) ... '। मैं कुछ और jQuery ट्यूटोरियल पढ़ने की सलाह देता हूं ... –

उत्तर

13
बदलते हैं

बजाय closest का उपयोग कर आप parent इस तरह उपयोग कर सकते हैं ...

var id = $(this).parent().attr("id"); 

सूचना आप तत्व है कि घटना की शुरूआत संदर्भ के लिए this कीवर्ड का उपयोग कर सकते हैं। जैसा कि आपके पास है, आप तत्व चयनकर्ता के रूप में buttonID के मान का उपयोग कर रहे हैं, जिसमें "popupDivClose" का मान होगा और शुरुआत में # जोड़ने के बिना यह एक आईडी की खोज नहीं करेगा, बल्कि "popupDivClose" नामक टैग तत्व होगा।

यदि आप buttonID का उपयोग कर आप कोड की इस पंक्ति यह काम कर रहा करने के लिए इस्तेमाल किया जा सकता था रखने के लिए चाहता था ...

var id = $("#" + buttonID).parent().attr("id"); 

हालांकि, मैं तो जैसे पूरे घटना लिखने के लिए पसंद किया जाता है | ...

$(".popupCloseClass").click(function (event) { 
    event.preventDefault(); 

    var id = $(this).parent().attr("id"); 

    disablePopup(id); 
}); 

event.preventDefault(); का उपयोग नोटिस यह सुनिश्चित करेगा कि ब्राउज़र एक लिंक क्लिक के लिए प्राकृतिक कार्रवाई को संसाधित नहीं करेगा (यानी- पृष्ठ नेविगेशन) हालांकि, क्रोम में कम से कम, आप एक href मूल्य नेविगेशन के लिए यह ठीक काम करता है वैसे भी

Here is a working example

+0

स्पष्ट स्पष्टीकरण के लिए बहुत बहुत धन्यवाद – Youssef

0

आप

$(".popupCloseClass").click(function (event) { 
    var id = $(this).closest("div").attr("id"); 
}); 

(आप भी $(this).parent().attr("id"); इस्तेमाल कर सकते हैं) क्या करना चाहिए लेकिन सबसे करीब का उपयोग कर मामले में सुरक्षित है आप अपनी एचटीएमएल संरचना

+0

ध्यान दें कि 'पैरेंट() 'केवल तत्काल माता-पिता को वापस कर देगा और इसलिए चयनकर्ता पैरामीटर व्यर्थ है। हालांकि आप 'माता-पिता (चयनकर्ता)' का उपयोग कर सकते हैं जो चयनकर्ता ले जाएगा और सभी माता-पिता (पेड़ तक सभी तरह से) लौटाएगा जो कि चयनकर्ता – musefan

+0

@musefan से मेल खाता है, यह मेरे विचार में निकटतम() का उपयोग करना बेहतर है क्योंकि आप आम तौर पर आपके एचटीएमएल को संशोधित करना और माता-पिता का उपयोग करने वाले कोड को तोड़ना() –

+0

बनाने के लिए एक अच्छा बिंदु, निश्चित रूप से विचार करने के लिए कुछ। हालांकि, मैंने अभी तक अपना कोड तोड़ दिया है ... फिर फिर, मैं इस तरह की कार्यक्षमता का उपयोग अक्सर नहीं करता 0 वैसे भी – musefan

0

निर्दिष्ट करना होगा:

$('a.popupCloseClass').click(function() { 
    var id = $(this).parent().attr('id'); 
});​ 

JSFiddle Demo

आप आपको आईडी प्राप्त करने के तरीके के बजाय this का उपयोग करना चाहिए और फिर इसे चयनकर्ता के रूप में उपयोग करने का प्रयास करना चाहिए (आप # बीएफ गायब थे आईडी अयस्क):

0

यह काम करना चाहिए:

$(".popupCloseClass").click(function (event) 
{ 
    var buttonID = $(this).parent().attr('id'); 
    disablePopup(buttonID); 
}); 

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

  • कोई संबंधित समस्या नहीं^_^