2011-04-12 17 views
13

मैं jqGrid का उपयोग कर रहा हूं और 3 कॉलम हैं जिन्हें सॉर्ट नहीं किया जा सकता है। इस बिंदु पर कर्सर एक हाथ में बदल जाता है जब उपयोगकर्ता शीर्ष पर सेट सॉर्ट किए बिना हेडर पर होवर करता है। मैं चाहता हूं कि कर्सर उन कॉलम हेडों पर हाथ (टेक्स्ट या पॉइंटर) के अलावा कुछ और हो। यह उपयोगकर्ताओं को इस तरह से भ्रमित कर रहा है। क्या यह कुछ सेट किया जा सकता है?सॉर्ट के आधार पर कर्सर शैली बदलें या

धन्यवाद, मार्क

उत्तर

17

मुझे प्रश्न बहुत अच्छा लगता है। तो मुझसे +1।

आप पहले व्यक्ति नहीं हैं (और अंतिम नहीं) जो गैर-क्रमबद्ध कॉलम पर एक और कर्सर रखना चाहते हैं। यह दयालु है, लेकिन jqGrid आपको कक्षाओं या कुछ अन्य सरल विशेषताओं को नहीं देता है जिनका उपयोग उन तत्वों को खोजने के लिए किया जा सकता है जिन पर कोई सीएसएस "कर्सर: डिफ़ॉल्ट" सेट कर सकता है।

तो मैं निम्नलिखित कोड के साथ ऐसा करने का सुझाव देते हैं:

var myGrid = $("#list"); 

// create the grid 
myGrid.jqGrid({ 
    // all jqGrid parameters 
}); 

// fix cursor on non-sortable columns 
var cm = myGrid[0].p.colModel; 
$.each(myGrid[0].grid.headers, function(index, value) { 
    var cmi = cm[index], colName = cmi.name; 
    if(!cmi.sortable && colName!=='rn' && colName!=='cb' && colName!=='subgrid') { 
     $('div.ui-jqgrid-sortable',value.el).css({cursor:"default"}); 
    } 
}); 

आप पर the demo कि विधि काम रहते हैं देख सकते हैं। डेमो में अंतिम कॉलम 'नोट्स' गैर-क्रमबद्ध है।

यह अच्छा होगा अगर ऐसा व्यवहार jqGrid के अगले संस्करण में मानक होगा। मैं समय खोजने और सुझाव लिखने की कोशिश करूंगा कि jqGrid के कोड से क्या व्यवहार को बाहर-द-बॉक्स बनाने के लिए बदला जाना चाहिए।

अद्यतन: गैर-क्रमबद्ध कॉलम पर कर्सर के साथ समस्या free jqGrid 4.8 में मौजूद नहीं है।

+0

मैं इसे लेता हूं आप कॉलमोडल में 'कर्सर: डिफ़ॉल्ट' नहीं जोड़ सकते हैं?(मुझे jqGrid के बारे में कुछ नहीं पता - बस सोच रहा है) –

+0

@Adam Terlson: 'colModel' में कौन से गुण आप "कर्सर: डिफ़ॉल्ट" जोड़ सकते हैं (देखें [यहां] (http://www.trirand.com/jqgridwiki/ doku.php आईडी = विकि: colmodel_options))? कोई भी नहीं है जो कॉलम हेडर पर लागू होगा। "कक्षाएं" विशेषता '' पर लागू होगी और '' तत्व पर लागू नहीं होगी। आप किसी भी ' 'ग्रिड के लिए सीएसएस को फिर से परिभाषित नहीं कर सकते हैं, क्योंकि आप" कर्सर: डिफ़ॉल्ट "** केवल क्रमबद्ध ** कॉलम सेट करना चाहते हैं। इसलिए मुझे ऐसा करने का कोई आसान तरीका नहीं दिख रहा है, लेकिन मैंने जो सुझाव दिया है वह कोड की कुछ पंक्तियां हैं और यह काम करता है। – Oleg

+0

मेरे लिए अच्छा लगता है। –

1

अतः आपका स्वागत है।

बिल्कुल। सीएसएस:

th.unsortableclass { 
cursor: default; 
} 

अब उस कक्षा को अपने कॉलम हेडर पर लागू करें जो क्रमबद्ध नहीं हैं।

+0

ठीक है .. मुझे यकीन है कि मैं इसे गलत कर रहा हूं। यहां मेरे पास है: $ ("# list")। JqGrid ('setLabel', 5, 'विवरण', {'कर्सर': 'पॉइंटर'}); और यह काम नहीं करता है। यदि मैं 'विवरण' बदलता हूं तो यह बदलता है, अगर मैं स्टाइल को टेक्स्ट पर आधारित करता हूं, तो यह बदल जाता है। तो मुझे लगता है कि सेट लेबल सही नहीं है। संकेत? –

+0

मैं jqGrid से परिचित नहीं हूं, लेकिन आपको उस कॉल के लिए पैरा को देखने की आवश्यकता होगी। यहां एक पृष्ठ दिया गया है: http://www.trirand.com/jqgridwiki/doku.php?id=wiki:conventions कॉलम स्वरूपण सामग्री देखें। ऐसा लगता है कि आप कर्सर डाल सकते हैं: वहां डिफ़ॉल्ट। –

1

ओलेग का उदाहरण बहुत अच्छा काम करता था लेकिन कॉलम को क्रमबद्ध करने पर मुझे हमेशा तीरों को दिखाने का अनुरोध था। मुझे पता है कि मैं टिप्पणी कर रहा हूं लेकिन सोचा कि किसी के पास एक ही आवश्यकता हो सकती है।

jQuery('span.s-ico',value.el).remove();

अपने कोड तो बाद चलता है:

तो मैं अपने पाश को यह जोड़ा

jQuery(".s-ico").show();

और फिर बनाने के मेरे ग्रिड को यह कहा:

onSortCol:function(index, iCol, sortorder){ 
    // redisplay all arrows 
    jQuery(".s-ico").show(); 
} 
संबंधित मुद्दे