2012-05-30 10 views
9

मेरे पास एक तालिका है जिसे मैं एक jQuery लोड कमांड के माध्यम से लोड करता हूं। लोड फ़ंक्शन के कॉलबैक में मैंने टेबललेटर प्लगइन शुरू किया। किसी कारण से तब तालिका केवल आरोही नहीं चढ़ती है। यहां तक ​​कि वीरडर, अगर मैं शिफ्ट पकड़ता हूं तो यह एसी और desc के बीच सही ढंग से टॉगल करेगा? कोई विचार क्या हो रहा है?jquery tableorter AJAX तालिका केवल एक दिशा क्रमबद्ध

table.php

<table id="xyz"> 
<thead> 
    <tr> 
     <th>hi</th> 
    </tr> 
</thead> 
<tbody> 
    <tr> 
     <td>a</td> 
    </tr> 
    <tr> 
     <td>b</td> 
    </tr> 
    <tr> 
     <td>c</td> 
    </tr> 
</tbody> 
</table> 

jQuery

$("#myDiv").load("table.php", function() { 
    $("#xyz").tablesorter(); 
}); 

अगर मैं अपेक्षा के अनुरूप ajax के माध्यम से मेज तो tablesorter कार्यों लोड न करें।

+0

यदि मैं वास्तव में तेज़ी से क्लिक करता हूं तो ऐसा लगता है कि यह आरोही क्रमबद्ध करता है लेकिन फिर फिर से उतरता है। –

+3

क्या आप अपनी फ़ाइल में कहीं भी '.tablesorter()' घोषित कर रहे हैं? आप डबल बाध्यकारी हो सकते हैं ... – Jason

+0

अच्छा विचार लेकिन नहीं, मैं केवल कॉल कर रहा हूं .tablesorter() एक बार –

उत्तर

9

ठीक है तो मैं जेसन विचार की तरह डबल बाध्यकारी था।

मैं वास्तव में एक वर्ग पर jQuery के लोड फ़ंक्शन को कॉल कर रहा था और मेरे पृष्ठ पर उस वर्ग के साथ दो div था। तो यह वास्तव में कॉलबैक फ़ंक्शन को दो बार कॉल कर रहा था?

मुझे लगता है कि यह अजीब व्यवहार है क्योंकि दोनों divs में लोड होने वाली सामग्री समान थी, लेकिन ऐसा लगता है कि jQuery प्रत्येक divs के लिए एक अलग AJAX कॉल करता है। आपकी टिप्पणियों के लिए आभार!

+0

मुझे एक ही समस्या थी, मैं सिर में jquery के दो संस्करण लोड कर रहा था। आपका प्रश्न मुझे यह समझने दो, धन्यवाद –

1

समस्या पहले से ही हल हो चुकी है, लेकिन मैं उल्लेख करूंगा कि मुझे एक ही समस्या है। कारण jquery के पुराने संस्करण में था: मेरे पास 1.4.2 था, 1.4.4 की आवश्यकता थी।

5

बस सोचा कि अगर कोई और इसमें चलता है तो मैं यहां एक और जवाब फेंक दूंगा। यह तब हुआ जब मैंने एक आईडी चयनकर्ता के बजाय कक्षा चयनकर्ता का उपयोग कर तालिका पर .tablesorter() पर कॉल करने का प्रयास किया। तो

$('#tablesorter').tablesorter();

करने से

$('.tablesorter').tablesorter();

इसे बदलने (और मार्कअप यह दिखाने के लिए) मेरे लिए यह समस्या सुलझा नहीं।

5

एक बार फिर, यह कैसे हल किया गया है, यह देखते हुए, मैं अपना अलग परिदृश्य साझा करना चाहता हूं।

मेरे तालिका शरीर पंक्तियाँ, एक .ajax कॉल से डायनामिक रूप से तैयार कर रहे हैं एक बार एक उपयोगकर्ता कहते हैं/संशोधित/एक पंक्ति को हटा देता है, तो तालिका शरीर पंक्तियों .removed() और function() के माध्यम से एक ही .ajax कॉल के साथ निर्मित कर रहे हैं। टेबल हेड बनी हुई है, इसलिए यह निश्चित रूप से टेबलर्स को द्वि-बांधता है, जो अजीब व्यवहार का कारण बनता है।

मेरे लिए ठीक $('#mytable').addClass('tablesorter').tablesorter(); तो जैसे आरंभ करने से पहले tablesorter निकल करने के लिए किया गया था:

$('#mytable') 
    .unbind('appendCache applyWidgetId applyWidgets sorton update updateCell') 
    .removeClass('tablesorter') 
    .find('thead th') 
    .unbind('click mousedown') 
.removeClass('header headerSortDown headerSortUp'); 

एक और ठीक सिर्फ शरीर के बजाय .ajax कॉल <tr> की पूरी तालिका बनाने के लिए हो सकता है।

आशा इस

+0

मेरे लिए सही जवाब क्योंकि मुझे पिछले बाइंडिंग को हटाने के लिए प्लगइन दस्तावेज़ों में कोई रास्ता नहीं मिला। – AdityaSaxena

1

में मदद करता है मैं एक ही समस्या है लेकिन एक अलग सेटअप, और जवाब इस सूत्र में उल्लेख किया था मेरी समस्या का समाधान नहीं किया था। मेरे परिदृश्य के लिए समाधान जोड़ना अगर किसी और के पास एक ही समस्या है।

मेरी तालिका बॉडी पंक्तियों को पेज लोड पर एक .ajax कॉल से गतिशील रूप से बनाया गया है और डेटा को लोड होने के बाद सॉर्ट करने के लिए एक कॉलम डिफ़ॉल्ट सॉर्टलिस्ट के रूप में सेट किया गया है।

10 कॉलम में से 5 एक नई तिथि सीमा सबमिट करने के आधार पर फिर से आबादी वाले हैं। मैं टेबल बॉडी का पुनर्निर्माण नहीं करता, बल्कि उचित रिकॉर्ड में डेटा इंजेक्शन देता हूं, फिर मेरे डिफ़ॉल्ट सॉर्टलिस्ट पर आधारित रिसॉर्ट करता हूं।

मेरी समस्या यह थी कि एक नई तिथि सीमा जमा करने के बाद, टेबललेटर को अब शीर्षलेख में दो बार परिभाषित किया गया था, इसलिए हेडर पर क्लिक करने से दो बार क्रमबद्ध होगा, केवल एक ही तरह से सॉर्ट करना होगा।

मेरा समाधान टेबललेटर हेडर को दो बार शुरू होने से रोकने के लिए था।

$('#mytableBody').trigger("update"); 
var sorting = [[5, 1]]; 
setTimeout(function() {$('#mytableBody').trigger('sorton', [sorting]) }, 1); 

मैं setTimeout का उपयोग: पृष्ठ लोड पर मैं इन सबसे एक स्तंभ मैं sortList संपत्ति मैं सेट में सेट, लेकिन हर नई समयावधि सबमिट किए, मैं उपयोगकर्ता निम्नलिखित लाइनों डेटा लोड करने के बाद अपने स्तंभ को क्रमबद्ध करने के लिए tablesorter जाने यह सुनिश्चित करने के लिए कि डेटा सॉर्ट करने से पहले पूरी तरह लोड हो गया है।

उम्मीद है कि इससे मदद मिलती है।

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