2009-09-04 8 views
4

Je suis en train de faire un effet de vol stationnaire comme suit:select perd le focus lorsque la souris est plus d'options

<div>Some Text</div> 

doit être remplacé par un <select> sur mouseover. dès que la souris quitte cette sélection, elle doit afficher la valeur précédemment affichée ou la nouvelle valeur sélectionnée.

Malheureusement, le mouseleave est appelé lorsque vous ouvrez la liste déroulante pour sélectionner certaines options et je ne peux pas le faire fonctionner. Est-ce que quelqu'un a déjà eu ce problème et connaît la solution?

<div id="text">Some Text</div> 
<select id="selector" style="display: none"> 
<option value="1" selected="selected">Some Text</option> 
<option value="2">Some More</option> 
<option value="3">Some Other</option> 
</select> 

jQuery:

$("#text").mouseover(function() 
{ 
    $(this).hide(); 
    $("#selector").show(); 
}); 

$("#selector").mouseleave(function() 
{ 
    $(this).hide(); 
    $("#text").show(); 
}); 

Quelqu'un peut-il me faire savoir comment je peux vous assurer que le mouseleave n'est pas appelée lorsque quelqu'un ouvre la sélection et plane sur les options?

BTW: Il fonctionne lorsque le bouton de la souris est pressé lors de la sélection

+0

Ici http://stackoverflow.com/questions/11781518/mouseenter-mouseleave-and-a-select est la réponse. J'ai modifié un peu pour le faire fonctionner pour moi .. – Sami

Répondre

1

Je pense que vous devez utiliser les changements et les événements flou pour ce faire: de cette façon

var hidesel=function() 
{ 
    $(this).hide(); 
    $("#text").show(); 
} 
$("#selector").change(hidesel).blur(hidesel); 

la sélection volonté être masqué lorsque l'utilisateur clique sur une option ou clique en dehors de la sélection. Je pense que c'est aussi plus pratique.

+0

le problème avec ceci est que le select ne disparait pas sur mouseout/mouseleave. pour faire le sélectionner perdre le focus, vous devez réellement cliquer ailleurs ... :( –

+0

@Frank: c'est le point de mck89 (je crois): il est préjudiciable à l'expérience utilisateur d'utiliser 'mouseleave' sur' flou 'en tant que" gâchette ": forcer l'utilisateur à effectuer des gestes de souris complexes pour atteindre son objectif est préjudiciable Voir http://www.joelonsoftware.com/uibook/chapters/fog0000000063.html (** Les utilisateurs ne peuvent pas contrôler la souris très bien **). Un clic est beaucoup moins enclin aux gestes "accidentels" qu'un mousemove.Plus, si vous allez avec "flou" vous seriez alors en mesure de personnaliser l'interface utilisateur pour travailler avec le clavier pour les utilisateurs –

+0

désolé, j'ai raté la phrase ci-dessous l'exemple de code ... encore, pas ce que je recherche malheureusement –

0

Avez-vous essayé d'utiliser l'événement hover()?

$("#text").hover(
function() { 
    $(this.hide(); 
    $("#selector").show(); 
}, 
function() { 
    $(this).hide(); 
    $("#text").show(); 
}); 
+0

Cela pose le même problème. –

+0

hover ne fonctionne pas ici. puisque ce serait appelé infiniment. –

0

envelopper dans un emballage <div> et définissez les gestionnaires d'événements sur ce

Working Demo

jQuery

$("#wrapper").mouseover(function() 
{ 
    $("#text").hide(); 
    $("#selector").show(); 
}); 

$("#wrapper").mouseleave(function() 
{ 
    $("#selector").hide(); 
    $("#text").show(); 
}); 

$("#selector").change(function() { 
    var value = $(this).val(); 
    $("#text").text($("option[value='"+value+"']", this).text()); 

}); 

HTML

<div id="wrapper"> 

    <div id="text">Some Text</div> 
    <select id="selector" style="display: none"> 

     <option value="1" selected="selected">Some Text</option> 
     <option value="2">Some More</option> 
     <option value="3">Some Other</option> 

    </select> 

</div> 
+0

Firefox comprends bien. Cependant, IE cache la boîte de sélection tout en laissant les options s'afficher, Chrome souffre du problème exact comme indiqué dans la question. –

+0

argh - J'aurais dû aussi tester IE! - une seconde ... –

+0

très agréable. mais comment résoudre le problème d'IE? :(soupir ... –

Questions connexes