Foros del Web » Programando para Internet » Jquery »

estilo con jquery para select

Estas en el tema de estilo con jquery para select en el foro de Jquery en Foros del Web. Hola Como muchos conoceis, dar estilo a un select y que funciones en IE y en FF es una labor dificil. Con jquery se puede ...
  #1 (permalink)  
Antiguo 16/06/2011, 07:03
 
Fecha de Ingreso: mayo-2011
Mensajes: 4
Antigüedad: 13 años
Puntos: 0
estilo con jquery para select

Hola
Como muchos conoceis, dar estilo a un select y que funciones en IE y en FF es una labor dificil.
Con jquery se puede conseguir "transformar" el select a un ul con sus li, y darle el estilo deseado. Y asi lo hice.

Podeis ver una prueba funcionando en
http://www.leunam.com/soporte/select/prselect22.html

Pero quiero hacer dos cambios y no se como realizarlo (mi jquery no es demasiado bueno):
1 - que el desplegable aparezca al clicar en "Seleccione un Talla", en lugar de que aparezca al pasar sobre él.
2 - que al clicar en el dato elegido (una talla) se cierre el desplegable, en lugar de que se cierre cuando quitamos el cursor del desplegable.
Vamos, que funcione igual que un select.

Alguien me puede echar una mano ¿?.
Gracias y un saludo

El codigo empleado es el siguiente:

*********** CSS
ul.plainSelect {
margin:0;
padding:0;
border: 1px solid #000;
list-style:none;
width:301px;
}
ul.plainSelect li {
background-color: pink;
display: list-item;
height: 3em;
border:1px solid #ccc;
border-top-width: 0;
text-indent: 1em;
cursor:pointer;
}
ul.plainSelect li.guidance {
padding: 0.3em;
font-weight: bold;
font-size: 1.2em;
background-color: #fff;
}
ul.plainSelect li.unselected {
background-color: orange;
display: none;
}
ul.plainSelect:hover li.unselected {
display: list-item;
}
ul.plainSelect li.unselected:hover {
background-color: yellow;
}

******* SCRIPT
<script type='text/javascript' src='http://code.jquery.com/jquery-1.4.4.min.js'></script>
<script type="text/javascript">
(function($) {
$.fn.selectUl = function(){
var $origSelect = $(this);
var newId = $(this).attr('name') + '-ul';
var numOptions = $(this).children().length;

$('<ul id="' + newId + '" class="plainSelect" />')
.insertAfter($(this));

$('<li class="guidance" />')
.text($(this).attr('title'))
.appendTo('#' + newId);

for (var i = 0; i < numOptions; i++) {
var text = $(this).find('option').eq(i).text();
$('<li />').text(text).appendTo('#' + newId);
}

if ($(this).find('option:selected')) {
var selected = $(this).find('option:selected').index();
$('#' + newId)
.find('li')
.not(':eq(' + selected + 0 + '), .guidance') //originalmente era un 1 y daba error en IE, si quito el +1 da error en FF y curiosamente con el +0 no da error ni en FF ni IE. SI lo quito, da error.
.addClass('unselected');
}

$('#' + newId + ' li')
.hover(
function(){
$(this).click(
function(){
var newSelect = $(this).index() - 1;

$(this)
.parent()
.find('.unselected')
.removeClass('unselected');

$(this)
.parent()
.find('li')
.not(this)
//.not('.guidance') //evito que este siempre el Seleccione talla
.addClass('unselected');
$($origSelect)
.find('option:selected')
.removeAttr('selected');
$($origSelect)
.find('option:eq(' + newSelect +')')
.attr('selected',true);
});
},
function(){
});

// para no ver el select visible
$(this).hide();

return $(this);
}
})(jQuery);


</script>


**** HTML
<body>

<select name="sizes" id="sizes" class="makePlain" title="Select a size:">
<option value="xxs">XX-Small</option>
<option value="xs">X-Small</option>
<option value="s">Small</option>
<option value="m">Medium</option>
<option value="l">Large</option>
<option value="xl">X-Large</option>
<option value="xxl">XX-Large</option>
</select>

<script type="text/javascript">
$('.makePlain').selectUl();
</script>
</body>

Etiquetas: ajax
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:48.