आह ... एक समाधान जिसे मैं सोच सकता हूं, उल ऑब्जेक्ट के साथ चयन को प्रतिस्थापित कर रहा है, और ईवेंट हैंडलर को उल को चुनने के लिए संलग्न करता है। ली तत्वों पर कॉलिंग। ऑफसेट() एफएफ और क्रोम दोनों पर अपेक्षित काम करता है।
तो यदि आप ली तत्वों पर क्लिक करते हैं, तो यह इसके पृष्ठभूमि रंग को अपडेट करेगा और छिपे हुए चयन के चयनित मूल्य को अपडेट करेगा। इस तरह, जब फॉर्म जमा किया जाता है, तो सही मान भेजा जाता है।
http://jsfiddle.net/hqYqh/
HTML:
<select id="mySelect" multiple="true">
<option>2011</option>
<option>2012</option>
<option>2013</option>
<option>2014</option>
<option>2015</option>
<option>2016</option>
<option>2017</option>
<option>2018</option>
<option>2019</option>
</select>
सीएसएस:
ul.select {
display: inline-block;
border: 1px solid black;
list-style: none;
margin: 0;
padding: 2px;
height: 80px;
overflow: auto;
width: 50px;
}
ul.select li {
background-color: none;
cursor: pointer;
}
ul.select li.selected {
background-color: skyblue;
}
जे एस:
var $select = $('#mySelect');
var $ul = $('<ul class="select">').on('click', 'li', function() {
$(this).parent().find('li').removeClass('selected');
$(this).addClass('selected');
$select.val($(this).text()).change();
});
$select.find('option').each(function() {
var $li = $('<li>').text($(this).text());
$ul.append($li);
});
$select.hide().after($ul);
$select.change(function() {
alert('Offset of ' + $(this).val() + ' is ' + JSON.stringify($('li.selected').offset()));
});
संपादित
तो, मैंने चयनित तत्व के ऑफसेट() और scrollTop() का उपयोग करके हुआंगवाद के सुझाव के बाद एक और विधि की कोशिश की।
केवल एक चीज जो उपलब्ध नहीं है विकल्प तत्व की ऊंचाई है। तो मैंने फ़ॉन्ट आकार का उपयोग करने का अनुमान लगाने की कोशिश की, लेकिन यह सही नहीं था, और मुझे सटीक ऑफसेट प्राप्त करने के लिए क्रोम पर जादू संख्या 3 जोड़ना पड़ा। यदि आप विकल्प तत्व की ऊंचाई को समझ सकते हैं, तो आपको उपरोक्त सभी उल/ली व्यवसाय से निपटने की ज़रूरत नहीं है।
संदेश यह है:
http://jsfiddle.net/hqYqh/2/
optionOffset = function($option) {
var i = $option.index();
var h = Number($option.css('font-size').replace(/px/, '')) + 3; // Cannot get the height of the option element :(
var $select = $option.parent();
var offset = $select.offset();
offset.top += i*h - $select.scrollTop();
return offset;
}
[यह] (http://stackoverflow.com/a/4240492/1427942) उपयोगी हो सकता है। मुझे नहीं पता, लेकिन शायद क्रोम में 'विकल्प' तत्वों के लिए कोई ऑफ़सेट नहीं है। – Eich
क्या आप इस विचार के बारे में कुछ और बता सकते हैं कि हम में से कुछ किसी अन्य दृष्टिकोण के साथ आ सकते हैं जिसमें '.offset() ' – kidwon
शामिल नहीं है, चयन का ऑफसेट पर्याप्त अच्छा नहीं है? – Huangism