2009-05-07 22 views
17

में परिवर्तन ईवेंट जोड़ना मेरे ड्रॉप डाउन के लिए अंतर्निहित HTML में बदलने का मौका है और मैं .change विकल्प के बजाय .live विकल्प का उपयोग करके इसे सेट अप करने का प्रयास कर रहा था। यह मेरे लिए काम नहीं करता है।JQuery - ड्रॉपडाउन

क्या मैं वर्तमान में है:

$("#ItemsPerPage").change(function(e) { return updatePaging(); }); 

Unfortuantely, अगर मैं इस पर नियंत्रण $.ajax के माध्यम से इसे खो देता है घटना परिभाषा अद्यतन करें। मैंने जो कोशिश की, और काम नहीं कर रहा है, है:

$("#ItemsPerPage").live("change", function(e) { return updatePaging(); }); 

कोई विचार?

उत्तर

23

हर बार <select> को पुनर्निर्मित करने के बजाय, आप इसके बजाय अपनी सामग्री (<option> तत्वों की सूची) को स्वैप करने से बेहतर हैं।

तो इस का उपयोग के रूप में आप पहले से ही कर रहे हैं:

$("#ItemsPerPage").change(function(e) { return updatePaging(); }); 

लेकिन जब आप इसे अद्यतन, बस उसकी सामग्री (जहां newSelectElement नई <select> तत्व है) बाहर स्वैप:

function updateItemsPerPage(newSelectElement) { 
    $("#ItemsPerPage").empty().append(newSelectElement.childNodes); 
} 

इस तरह, बाध्यकारी को ताज़ा करने की आवश्यकता नहीं होगी क्योंकि नोड स्वयं स्वैप नहीं होता है।

2

परिवर्तन घटना लाइव() द्वारा समर्थित नहीं है। घटना परिभाषा को पुन: असाइन करने वाले प्रत्येक AJAX कॉल के अंत में फ़ंक्शन चलाने के बारे में कैसे?

3

samiz के सुझाव पर विस्तार करने के लिए, तो आप इस तरह कुछ करने के लिए की आवश्यकता होगी:

$(function() { 
    bind_items_per_page(); 
}); 

function bind_items_per_page() { 
    $("#ItemsPerPage").unbind('change').bind('change',function() { 
     updatePaging(); 
    }); 
} 

function updatePaging() { 
    $.post('/some/script',{foo:'bar',bar:'foo'},function(data) { 
     /* what ever you need to do */ 
     // And assuming what ever you did above changed your select box... 
     bind_items_per_page(); 
    }); 
} 
संबंधित मुद्दे