2010-06-29 11 views
5

मैं एक अजीब समस्या से निपट रहा हूं कि .click() घटनाएं जब भी jQuery संवाद में रखी जाती हैं तो दो बार होती है।एक jQuery संवाद में घटनाओं पर क्लिक करें दो बार होता है?

मेरे साधारण परीक्षण मामले नीचे है और एक live example is here

<div id="popup" style="display: none"> 
    <a href="javascript:void(0);" id="testlink">Test Link</a> 
    <script type="text/javascript"> 
     $('#testlink').click(function(){ 
     alert("Test Link clicked"); 
     return 0; 
     }); 
    </script> 
    </div> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
    $('#popup').css('display','block'); 
    var h=($(window).height()+0.0)*0.9; 
    var w=($(window).width()+0.0)*0.9; 
    if(w >= 800){ 
     w = 800; 
    } 
    $('#popup').dialog({ 
     autoOpen: true, 
     width: w, 
     height: h, 
     modal: true, 
     open: function(event,ui){ 
     $('body').css('overflow', 'hidden'); 
     }, 
     close: function(event,ui){ 
     $('body').css('overflow', 'scroll'); 
     } 
    }); 
    }); 
    </script> 

उत्तर

7

ले जाएँ <script> ब्लॉक कि popup div के बाहर क्लिक करें घटना पंजीकरण करता है, मुझे लगता है कि जे एस एक और समय पार्स हो जाता है जब div दिखाई देने लगता है ..

+0

आह, जो इसे यहां दिखाए गए अनुसार ठीक करता है: http://jsbin.com/odago/2 – Earlz

+0

हू। मुझे आपके पतले नमूने के साथ स्थानीय रूप से चलने वाली डबल कॉल नहीं मिली, लेकिन मुझे इसे आपके मशीन पर चलने वाले आपके लाइव नमूने पर मिला। आपकी नमूना साइट पर कुछ अतिरिक्त सामान भी चल रहा है। – a7drew

+0

मैंने क्रोम पर इसका परीक्षण किया, यह था ... –

2

सबसे आम कारण, ऐसा क्यों होता है, यह है कि आपकी स्क्रिप्ट को 2 बार पार्स किया गया है। यदि आप निश्चित नहीं हैं, जहां यह होता है या डीबग करने का कोई समय नहीं है, तो यहां एक सरल कामकाज है।

विचार एक नए हैडलर लागू होने से पहले, सभी सक्रिय थाईलरों को हटाने का विचार है।

$('.selector').unbind('click').click(function() { 
    // your code 
}); 

यदि आप jQuery 1.7 या ऊपर का उपयोग करते हैं, तो आप निम्न वाक्यविन्यास का उपयोग कर सकते हैं।

$('.selector').off('click').on('click', function() { 
    // your code 
}); 
संबंधित मुद्दे