2012-09-27 22 views

Respuesta

8

¡Finalmente conseguí que esto funcionara! Necesita Chosen; como otros han señalado, no puede hacer esto con un select normal porque no hay eventos disponibles para usar. Pero esto abrirá el menú al pasar el mouse por encima del select y lo cerrará cuando elimine el mouse, que es el efecto exacto que quería.

HTML:

<select id="dropdown" data-placeholder="Choose&hellip;"> 
    <option value="one">Option 1</option> 
    <option value="two">Option 2</option> 
    <option value="three">Option 3</option> 
</select> 

JS:

$("#dropdown").chosen().next(".chzn-container").hover(
    function(){ 
     $("#dropdown").trigger("liszt:open"); 
    }, 
    function(){ 
     $(this).trigger("click"); 
    } 
); 

$("#dropdown").trigger("liszt:open"); es lo que se abre el menú. No existe un evento equivalente liszt:close que se active cuando desee cerrarlo (hasta donde yo sé), pero activarlo click tiene el mismo efecto.

+0

Gracias. Y una solución más elegante sería cambiar '$ (" # desplegable "). Trigger (" liszt: abrir ");' a '$ (esto) .prev ('seleccionar'). Trigger (" liszt: abrir ") ; ' –

2

trigger solo llama a las funciones vinculadas mediante una de las funciones de enlace de jQuery.

No hay manera cruzada navegador para abrir un grupo selecto de Javascript (se podría sea posible llamar this.click() en algunas versiones de IE pero no puedo probar, y estoy seguro de que no hay manera de otra navegadores).

+0

¿Está pensando en triggerHandler()? trigger() también dispara el evento nativo. –

+0

No creo que desencadene el evento nativo.* "Para objetos planos y objetos DOM, si el nombre de un evento desencadenado coincide con el nombre de una propiedad en el objeto, jQuery intentará invocar la propiedad como un método si ningún controlador de eventos llama a event.preventDefault()" *. Eso es diferente. –

+0

Ah, claro, tu última oración lo clava: selecciona no tiene un método de clic. –

0

Esto no es posible. Solo puede implementar su propio complemento select-box o Chosen, pero esto es malo para la usabilidad. También piense en trigger('focus').

+0

Estoy usando Elegido, en realidad. ¿Eso lo hace más fácil/posible? – daGUY

+0

Eso lo hace posible, pero más fácil. Como Elegido reemplaza 'selectbox' con elemento' div', puedes manipular eventos. Elegido probablemente tenga su propia función '_show()' y '_hide()', por lo tanto algo como '$ (". Chzn-container "). Mouseover (unknown_chosen_function());' podría funcionar, o no :) – Turcia

+0

hm. ..la función parece llamarse 'Chosen.prototype.results_show', pero no puedo averiguar cómo activarla correctamente ... – daGUY

4

Ha sido un tiempo, pero no es una solución, no veo aquí, usando hover para cambiar la longitud de select:

$('select').hover(function() { 

    $(this).attr('size', $('option').length); 
}, function() { 

    $(this).attr('size', 1); 
}); 

http://codepen.io/anon/pen/avdavQ

Y aquí está una pluma donde es un poco más que la necesidad básica y tiene algo de estilo:

Demo

+0

Intenté agregar un valor con su solución, pero no funciona. – NineCattoRules

+0

No estoy seguro de lo que eso significa, tendrías que darme un poco más para continuar ... – Shikkediel

+0

intenta usar tu demo e inserta 'value = ...' para tus opciones – NineCattoRules

0

Unfortun definitivamente el método con Elegido - no funcionó para mí.

Pero pensé que podría hacer mi propio selector en jQuery.

HTML:

<div class='select'> 
    <p class='input'>Select option</p> 
    <input type='hidden' name='some_name_to_form' /> 
    <div class='hidden'> 
    <p value='id_1' >option long value</p> 
    <p value='id_2' >option 2</p> 
    <p value='id_3' >option 3</p> 
    </div> 
</div> 

JS:

$('.hidden p').click(function(){ 
    $(this).closest('.select').find('.input').text($(this).text()); 
    $(this).closest('.select').find('input').val($(this).attr('value')); 
    $(this).closest('.select').trigger("change"); 
}); 

$('.select').change(function(){ 
    // ... do stuff 
}); 

https://codepen.io/qwer643/pen/LebKpo

Cuestiones relacionadas