2011-12-02 11 views
11

अगर मैं नीचे दिए गए कोड है, वर्ग धारावाहिक की बक्सें एक बार अगर नए धारावाहिक बटन को कई बार दबाया जाता है और अधिक से अधिक घटनाओं के लिए बाध्य होंगे।jQuery कई बार jQuery में तत्वों को बाध्यकारी घटनाओं पर प्रभाव पड़ता है?

क्या यह बाधा प्रदर्शन या jQuery केवल घटनाओं रजिस्टर करता है एक बार भले ही बाँध विधि कई बार कहा जाता है?

$(document).ready(function() { 

    MonitorSerialTextBoxes(); 

    $('#newSerial').click(function() { 

     $.tmpl("productTemplate", mymodel).insertAfter($(".entry").last()); 
     MonitorSerialTextBoxes(); 

    }); 

    function MonitorSerialTextBoxes() { 
     $('.serial').each(function() { 
     // Save current value of element 
     $(this).data('oldVal', $(this).val()); 

     // Look for changes in the value 
     $(this).bind("propertychange keyup input paste", function (event) { 

     // If value has changed... 
     if ($(this).data('oldVal') != $(this).val() && $(this).val().length == 10) { 

      // Updated stored value 
      $(this).data('oldVal', $(this).val()); 

      // Do action 
     } 
     }); 
    } 

}); 

अद्यतन: मेरा मानना ​​है कि यह इतना MonitorSerialTextBoxes समारोह ठीक thiings लिए नीचे दिए गए कोड को जोड़ने जाएगा होगा?

$('.serial').unbind("propertychange keyup input paste"); 

jQuery प्रलेखन से:

यदि अनेक संचालकों पंजीकृत हैं, वे हमेशा वे किस क्रम में बंधे हुए थे

+1

मैं इसे परीक्षण के बिना जवाब के बारे में यकीन नहीं है, लेकिन आप इसे अपने आप को दृश्य घटना के साथ परीक्षण कर सकते हैं। http://www.sprymedia.co.uk/article/Visual+Event बस पृष्ठ पर निर्देशों का पालन करें। –

उत्तर

12

तुम एक करने के लिए कई ईवेंट हैंडलर्स बाध्य कर सकते हैं में निष्पादित करेंगे एकल तत्व दो onclick घटनाओं के साथ एक बटन का उत्पादन होता है:

$("button").bind("click", myhandler); 
$("button").bind("click", myhandler); 

एक विकल्प पहले की घटनाओं निकल करने के लिए होगा:

$("button").unbind("click").bind("click", myhandler); 
$("button").unbind("click").bind("click", myhandler); 

यह केवल एक ही बाध्य क्लिक करें घटना का परिणाम देगा।

आप घटनाओं rebinding कर रहे हैं, क्योंकि आपके प्रपत्र गतिशील तत्व जोड़ा गया है, तो आप live() या नए on(), जो तत्व है कि अभी तक अस्तित्व में नहीं हो सकता है करने के लिए बाध्य कर सकते हैं घटनाओं पर गौर कर सकते हैं। उदाहरण:

$("button").live("click", myhandler); // All buttons (now and in 
             // the future) have this handler. 

वेबकिट डेवलपर टूल (Safari और Chrome), आप देख सकते हैं घटनाओं यह निरीक्षण, तो तत्वों पैनल के दाएँ फलक में नीचे स्क्रॉल करके एक तत्व के लिए बाध्य कर रहे हैं। यह 'इवेंट श्रोताओं' नामक एक संक्षिप्त बॉक्स के नीचे है। फायरबग में समान कार्यक्षमता होनी चाहिए।

+5

आप jQuery संस्करण पर हैं 1.7+ [ '.live()'] (http://api.jquery.com/live/) विधि [ '.on()'] (http के पक्ष में पदावनत किया गया है: //api.jquery.com/on/) (जो आप का उल्लेख), लेकिन फिर भी संस्करण के बारे में से 1.4 + इसका इस्तेमाल करने की सिफारिश की गई थी [ '.delegate()'] (http://api.jquery.com/delegate) '.live()' के बजाय। – nnnnnn

2

खैर मैं इस भूमि के ऊपर और कुछ समस्याओं का एक बहुत का कारण बनता है क्योंकि घटनाओं एक बार से अधिक आबद्ध कर रहे हैं लगता है। इस सरल बेला को देखो: http://jsfiddle.net/nicolapeluchetti/syvDu/

<button id='newSerial'>Button</button> 
<div class='serial'>Serial</div> 
<div class='serial'>Serial</div> 
<div class='serial'>Serial</div> 

MonitorSerialTextBoxes(); 

$('#newSerial').click(function() { 
    MonitorSerialTextBoxes(); 

}); 

function MonitorSerialTextBoxes() { 
    $('.serial').each(function() { 


     // Look for changes in the value 
     $(this).bind("click", function(event) { 
      alert("hi"); 
     }); 
    }); 
} 

आप पेज के लिए जब आप एक div पर क्लिक करें एक भी alòert प्रदर्शित किया जाता है लोड, लेकिन हर बार जब आप बटन क्योंकि एक नई घटना

जुड़ा हुआ है एक और चेतावनी प्रदर्शित किया जाता है प्रेस जब
संबंधित मुद्दे