jQuery

2011-05-30 4 views
6

फायरिंग नहीं घटना मैं 3 फ़ाइलें: - jQuery

  • javascript.js मेरी json कोड के लिए> -

    • js_json.js> मेरी जावास्क्रिप्ट समारोह के लिए
    • index.php

    यहाँ js_json.js के लिए कोड:

    $(function(){ 
        $('#postTitle').change(function(){ 
    
         var title_id = $("#postTitle").val(); 
    
    
         $.ajax({ 
          type:"post", 
          url:"proses.php", 
          data:"title_id=" + title_id, 
          dataType:"json", 
          success:function(data){ 
           body=""; 
           //$.each(data, function(i,n){ 
            //body = n['body'];  
           //}); 
           body += "<a href=\"javascript:void(0);\" id=\"pesan\" name="pesan" onClick=\"\">Hola Test</a>"; 
           $(".postBody").empty(); 
           $(".postBody").append(body); 
          }, 
          error:function(data){ 
           $(".postBody").empty(); 
           $(".postBody").append("NO Post Selected."); 
          } 
    
         }); 
         return false; 
        }); 
    }); 
    

    और यहाँ मेरी javascript.js कोड:

    $(function(){ 
        $("a[name=pesan]").click(function(){ 
         alert("holalalalalal.....!");  
        }); 
    }); 
    

    और यहाँ index.php कोड:

    //some code 
        <body> 
         <a href="javascript:void(0);" id="pesan" name="pesan">Hola Test 1</a> 
         Posts : <br /> 
         <select name="title" id="postTitle"> 
          <option value="">Select Post...</option> 
          <?php 
           $sql = "SELECT id, title FROM posts ORDER BY title"; 
           $query = mysql_query($sql) or die(mysql_error()); 
    
           while($rows = mysql_fetch_array($query)){ 
            print('<option value="' . $rows['id'] . '">' . $rows['title'] . '</option>'); 
           } 
          ?> 
         </select> 
         <br /> 
         Body : <br /> 
         <div class="postBody"> 
          Will show the body of post. 
         </div> 
        </body> 
    </html> 
    

    और मेरे सवाल यह है:

    जब मैं लिंक "होला टेस्ट 1" पर क्लिक करें, यह काम करता है और संदेश प्रकट होता है। समस्या यह है कि, मैं चयन विकल्प पर क्लिक करने के बाद, और "होला टेस्ट" लिंक दिखाई देता है, और फिर मैं उस ("होला टेस्ट") लिंक पर क्लिक करता हूं, संदेश प्रकट नहीं होता है और फ़ायरबग में कोई त्रुटि नहीं होती है ...

    क्या कोई मुझे समझा सकता है क्यों ...? धन्यवाद के ...

  • +0

    उपयोग '। लाइव() 'के रूप में [@Matt] (http://stackoverflow.com/questions/6173238/jquery-event-not-firing/6173263#6173263) ने उत्तर दिया, लेकिन ध्यान रखें कि एक ही आईडी का उपयोग करना अमान्य है एक पृष्ठ एक से अधिक बार (* आईडी अद्वितीय हैं *), और संभावित रूप से भविष्य में अन्य समस्याओं का कारण बन जाएगा .. –

    +0

    @gaby सलाह के लिए धन्यवाद ... – Sindhu13

    उत्तर

    14

    click() केवल तत्वों के लिए घटना उस समय click कहा जाता है पर पेज में मौजूद हैं (एक ही एक चयनकर्ता के बिना on() के लिए चला जाता है, bind(), और के लिए शॉर्टकट-समूह के सभी अन्य तरीकों के लिए बाध्य होगा बांधें; keydown(), change() आदि)।

    क्योंकि आपका अन्य तत्व AJAX के माध्यम से कुछ समय बाद के माध्यम से जोड़ा जा रहा है, हैंडलर इसके लिए बाध्य नहीं है।

    इसके बजाय चयनकर्ता के साथ .on() का उपयोग करें, जो चयनकर्ता द्वारा मेल खाने वाले सभी मौजूदा और भविष्य के तत्वों को ईवेंट को बाध्य करेगा।

    $(function(){ 
        $(document).on('click', 'a[name=pesan]', function() { 
         alert("holalalalalal.....!");  
        }); 
    }); 
    

    on() के बाद से, jQuery 1.7 में पेश किया गया था आप jQuery के पुराने संस्करणों का उपयोग कर रहे हैं (उन है कि अस्तित्व में जब यह सवाल पूछा गया था) की तरह, आप live() या delegate() बजाय पर उपयोग कर सकते हैं;

    $(function(){ 
        $('a[name=pesan]').live('click', function() { 
         alert("holalalalalal.....!");  
        }); 
    }); 
    
    +0

    धन्यवाद, यह काम करता है ... और धन्यवाद स्पष्टीकरण ... यही वह है जो मैं ढूंढ रहा था .... – Sindhu13

    +0

    इसके लिए धन्यवाद! मैं पहले 'तत्व' जैसे तत्व पर उपयोग करके पहले अटक गया: $ ("पी") .on ('क्लिक करें', फ़ंक्शन() {}); कोई स्पष्टीकरण क्यों? मैंने देखा कि क्रोम इस चेतावनी को फेंक रहा है: मुख्य थ्रेड पर सिंक्रोनस XMLHttpRequest को अंतिम उपयोगकर्ता के अनुभव के हानिकारक प्रभावों के कारण बहिष्कृत किया गया है। अधिक सहायता के लिए, http://xhr.spec.whatwg.org/ देखें। –

    1

    मैं (क्योंकि मैं के किसी भी मामले "घटना फायरिंग नहीं" में इसके बारे में कोई जिक्र नहीं पाया मैं के लिए वेब में घूमते) का उल्लेख वहाँ एक संभावना जो आपको काट सकता है कि चाहते हैं।

    यदि आप .remove() का उपयोग डीओएम से अस्थायी रूप से निकालने के लिए करते हैं और फिर इसे पुन: सम्मिलित करते हैं, तो आप अपनी घटनाओं को खो देंगे। इसके बजाय आपको उपयोग करने की आवश्यकता है .detach() पुन: सम्मिलन के बाद डेटा और घटनाओं को संरक्षित करने के लिए। डीबग करना मुश्किल हो सकता है क्योंकि सबकुछ सामान्य दिख सकता है, और ईवेंट डिबगिंग टूल सबसे अच्छे हैं।

    (व्यक्तिगत रूप से मैं उन्हें जैसे कुछ और कहूंगा।detachAndScrubDataAndEvents() और .डेटा(), क्योंकि मैं डिबगिंग के घंटे सहेजने वाले वर्णनात्मक नामों का प्रशंसक हूं। जो लोग .remove लगता है() और .detach के लिए() शब्दार्थ और सार्थक प्रतिष्ठित नाम होने के लिए ... शांति तुम्हारे साथ रहना ... लेकिन आप बाहर फ्लैट गलत हैं।)