2012-09-25 26 views
12

अब मुझे पता है कि इस मूल प्रश्न से पहले पूछा गया है, लेकिन मुझे कुछ गलत करना होगा। मुझे पता है कि इससे पहले कि मैं इसमें कुछ भी कर सकूं, एक संलग्न तत्व को बांधना चाहिए। हालांकि, कोशिश करें कि मैं इसे काम पर नहीं ला सकता हूं।Jquery के साथ एक संलग्न तत्व को कैसे निकालें और बाध्य या लाइव क्यों तत्वों को दोहराते हैं

मैं एक संदेश में खींच रहा हूं और जब लोग रेडियो चयन पर क्लिक करते हैं तो प्रदर्शित होते हैं। जब भी मैं नए तत्व को बांधने की कोशिश करता हूं, तो यह अजीब तरीके से ढेर होता है। यह तत्वों को ढेर करना शुरू कर देगा। उदाहरण- [1 क्लिक करें] संदेश 1, [क्लिक 2] संदेश 1 और 2 और इसी तरह।

मैंने इसे बांधने के विभिन्न तरीकों के पूरे समूह की कोशिश की है। मेरी आशा थी कि हटा # फीडबैक को पट्टी कर देगा और फिर अगला संदेश बनायेगा और बाध्य करेगा। मुझे कुछ गलत करना होगा। मुझे पता है कि यह अन्य पदों के समान ही है, लेकिन मैं उन सभी के माध्यम से चला गया और मदद करने के लिए पर्याप्त स्पष्ट उत्तर नहीं मिला। पहले ही, आपका बहुत धन्यवाद।

एचटीएमएल

<div class="answers"> 
    <ul> 
     <li> 
      <input id="answer" type="radio" onclick="feedback('THE MESSAGE HTML')"><label>Label</label> 
     </li> 
    </ul> 
</div> 

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

function feedback(message) 
{ 
    $('#answer').live('click', function() 
    { 
     $('#feedback').remove(); 
    }); 

    $('#answer').live('click', function() 
    { 
     $('.answers').append('<div id="feedback">'+message+'</div>'); 
    }); 
}; 
+0

आप इसके लिए एक बेला बना सकते हैं ?? –

उत्तर

14

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो मैंने fiddle बनाया है जो यह सही तरीके से काम कर रहा है। यह मुद्दा यह है कि आप ईवेंट हैंडलर को कैसे असाइन कर रहे हैं और जैसा कि अन्य ने कहा है कि आप ईवेंट हैंडलर पर सवारी कर रहे हैं। वर्तमान jQuery सर्वोत्तम अभ्यास ईवेंट हैंडलर पंजीकृत करने के लिए on() का उपयोग करना है। यहाँ on के बारे में jQuery डॉक्स के लिए एक लिंक है: link

आपका मूल समाधान बहुत करीब था, लेकिन जिस तरह से आप ईवेंट हैंडलर्स जोड़ा थोड़ा भ्रामक है। एचटीएमएल तत्वों में घटनाओं को जोड़ने के लिए इसे सबसे अच्छा अभ्यास माना जाता है। मैं Unobstrusive जावास्क्रिप्ट पर पढ़ने की सलाह देते हैं।

यहां जावास्क्रिप्ट कोड है। मैंने एक काउंटर वैरिएबल जोड़ा ताकि आप देख सकें कि यह सही तरीके से काम कर रहा है।

$('#answer').on('click', function() { 
    feedback('hey there'); 
}); 

var counter = 0; 

function feedback(message) { 

    $('#feedback').remove(); 

    $('.answers').append('<div id="feedback">' + message + ' ' + counter + '</div>'); 

    counter++;  
} 
+0

ठीक है, ऐसा लगता है कि अब काम कर रहा है। आपको बहुत - बहुत धन्यवाद! यह बहुत उपयोगी है। हाँ, समस्या का हिस्सा मैं लाइव फ़ंक्शन को पूरी तरह से समझ नहीं पाया था। मुझे और अधिक देखना होगा। और सुझावों के लिए धन्यवाद। – user1197728

+0

आपका स्वागत है। मैं खुश हूं कि मैं मदद कर सका। जब ईवेंट हैंडलर पंजीकृत करने की बात आती है तो jQuery सर्वोत्तम प्रथाएं हर समय बदलती हैं। यह '' ('' '' '' होता था, फिर यह '' प्रतिनिधि() '' बन गया और अब यह '' ('' '' '' '' है। – richoffrails

+0

तो डोम पर ईवेंट हैंडलर घुसपैठ कर रहे हैं, लेकिन उन तत्वों तक पहुंचने के लिए आईडी बनाते हैं। आईडी स्ट्रिंग और एफएन कॉल स्ट्रिंग के बीच घुसपैठ में क्या अंतर है? यह 2014 है, और मुझे अभी भी यह नहीं मिला है। –

1

live समारोह एक क्लिक करें घटना हैंडलर पंजीकृत किया गया है। जब भी आप ऑब्जेक्ट पर क्लिक करेंगे तो यह ऐसा करेगा। तो यदि आप इसे दो बार क्लिक करते हैं, तो आप ऑब्जेक्ट पर दो क्लिक हैंडलर असाइन कर रहे हैं। आप यहां एक क्लिक हैंडलर बताए जा रहे हैं:

onclick="feedback('the message html')"; 

और फिर उस क्लिक के हैंडलर live() के माध्यम से एक और क्लिक हैंडलर बताए है।

सच क्या मुझे लगता है कि आप क्या करना चाहते है:

function feedback(message) 
{ 
    $('#feedback').remove(); 

    $('.answers').append('<div id="feedback">'+message+'</div>'); 
} 

ठीक है, अपनी टिप्पणी प्रति, <a> तत्व की onclick हिस्सा बाहर ले और इसके बजाय, एक document.ready() हैंडलर में इस डाल कोशिश ।

$('#answer').live('click',function(){ 
        $('#feedback').remove(); 
        $('.answers').append('<div id="feedback">'+message+'</div>'); 
       }); 
+0

यही वह है जिसे मैंने शुरू करने की कोशिश की। इसके साथ मुद्दा यह है कि निकालें पहली प्रतिक्रिया नहीं लेगी। इससे अजीब स्टैकिंग समस्या हल हो जाती है, लेकिन पिछले संदेश को हटाने के साथ समस्या नहीं है। यह वही है जो मैंने सोचा था। – user1197728

+0

ओह, मैं आपको धन्यवाद कहना चाहता था क्योंकि ऐसा लगता है कि स्टैकिंग समस्या क्यों हो रही है। – user1197728

+0

@ user1197728 मेरे संपादन की जांच करें –

0

.. आप पृष्ठ पर एकाधिक रेडियो बटन है

क्योंकि क्या मैं देख रहा हूँ कि आप पृष्ठ पर सभी रेडियो बटन के लिए घटनाओं बताए जाते हैं जब आप एक रेडियो बटन पर क्लिक करें है

+0

हां। क्षमा करें मुझे HTML का अधिक से अधिक रखना चाहिए था। – user1197728

+0

* यह है * जब आप कोड देखते हैं तो आप क्या देखते हैं? एकाधिक नेस्टेड क्लिक हैंडलर नहीं? : पी –

0

मैं की तरह कुछ करना होगा:

$(documento).on('click', '#answer', function() { 
    feedback('hey there'); 
});