2009-12-29 23 views
5

मैं थोड़ा मतदान तंत्र बना रहा हूं जो AJAX के माध्यम से एक त्वरित डेटाबेस टाइमस्टैम्प भेजता है।JQuery क्लास चयनकर्ता अभी भी हटाने के बाद फायरिंग क्लास

कक्षा "वोट" के साथ बटनों की एक श्रृंखला वोट करने के लिए ट्रिगर्स हैं, जबकि नीचे दिए गए पाठ को दिखाने के लिए कि उस विशेष आइटम के लिए कितने "वोट" हैं।

क्लिक ईवेंट से AJAX विधि चलाने के बाद, मैं "वोट" कक्षा को हटा देता हूं जैसे कि उस आइटम से एक से अधिक नहीं हो सकता है। हालांकि मेरी समस्या यह है कि कक्षा को हटाकर भी ट्रिगर अभी भी कई वोटों को आग और बढ़ा सकता है।

 <div class="points"> 
     <img class="vote" src="images/up.gif" alt="'.$idea['id'].'"> 
     <p class="vote-'.$idea['id'].'">'.$points.' Points</p> 
    </div> 

यहाँ jQuery कॉल है::

यहाँ तत्व के HTML है

$('.vote').click(function(){ 
     var iID = $(this).attr('alt'); 
     var typeString = "id="+iID; 
     $.ajax({ 
      type: "POST", 
      url:"vote.php", 
      data: typeString, 
      success: function (txt){ 
       $('.vote-'+iID).html('<p>'+txt+' Points</p>'); 
      } 
     }); 
     $(this).attr('src', 'images/voted.gif'); 
     $(this).removeClass('vote'); 
    }); 
+1

'$ (यह) .removeClass ('वोट')। Unbind ('क्लिक करें');' – czarchaic

+2

मध्यस्थ के उत्तर के अनुसार: आप jQuery के '$ (" वोट ") का उपयोग करना चाह सकते हैं। (" क्लिक करें " , फ़ंक्शन() {}); 'क्लिक के बजाए, यदि आप गतिशील रूप से तत्व बना रहे हैं तो आपको बाध्यकारी और अनबाइंडिंग से परेशान करने की आवश्यकता नहीं है। –

उत्तर

5

DOM तत्व की class के बाद यह संदर्भित करने के लिए, अपने इवेंट बाध्यकारी व्यवहार में परिवर्तन करने के लिए नहीं किया जाता है।

डीओएम तत्वों को निकालने के लिए ईवेंट unbind पर क्लिक करें।

9

आप DOM एलीमेंट का ईवेंट हैंडलर संलग्न कर रहे हैं, और यह बरकरार रहता है। आप या तो

ए कर सकते हैं। .data('triggered', 1) सेट करें:

if (!$(this).data('triggered')) { 
    // do code 
    $(this).data('triggered', 1); 
} 

बी।

if ($(this).hasClass('vote')) { 
    // do code 
} 

सी। .click के बजाय .live का उपयोग करें, उदाहरण के लिए $('.foo').live('click', fn)

डी। मैन्युअल रूप से अपने कोड, $(this).unbind('click') अंतिम पंक्ति के रूप लागू करने के बाद इवेंट हैंडलर निकालें, निकालें वर्ग बिट

1

चयनकर्ता का मूल्यांकन केवल एक बार किया जाता है, जब इसे पहली बार बुलाया जाता है। प्रत्येक तत्व को मिलान करने के लिए हर बार एक घटना को निकाल दिया जाता है जब इसे फिर से मूल्यांकन नहीं किया जाता है; वह धीमा होगा।

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