2010-12-12 7 views
1

J'ai un formulaire appelé #status. Je voudrais que si vous vous concentrez sur l'entrée de formulaire, #statusUpdate, puis le bouton d'envoi, #submitStatus devrait apparaître.jQuery: focus et flou

Je l'ai fait ceci:

$("#statusUpdate").focus(function(){ 
    $("#submitStatus").show(); 
}); 

$("#statusUpdate").blur(function(){ 
    $("#submitStatus").hide(); 
}); 

Cela fonctionne bien, maintenant ma question est quand le #submitStatus apparaît, et que vous voulez cliquer dessus, il disparaît dans le même splitsecond, parce que le #statusUpdate le focus se perd (flou) et le cache donc.

Comment est-ce que ceci peut être fixé?

Répondre

2

conception étrange;) Vous pouvez envelopper hide dans un setTimeout comme celui-ci

setTimeout(function() { $("#submitStatus").hide(); }, 100) 

ou utiliser jQuery delay (nécessite l'ajout d'une param à hide())

0

Si je vous comprends bien, vous êtes à la recherche pour quelque chose qui cache le bouton de soumission et que vous souhaitez afficher le bouton de soumission, une fois que vous obtenez le focus sur le statut Update. Ce que vous faites dans votre extrait est que tant que la case de mise à jour de statut est active, le bouton de soumission s'affiche, mais si vous essayez de cliquer dessus, le focus est perdu et le bouton de soumission se cache immédiatement. Ce n'est pas le résultat souhaité. La réponse ci-dessus semble bonne et vous permettra d'avoir le temps de cliquer sur le bouton dont vous avez besoin. L'extrait total serait

$("#statusUpdate").focus(function(){ 
    $("#submitStatus").show(); 
}); 

$("#statusUpdate").blur(function(){ 
    setTimeout(function() { $("#submitStatus").hide(); }, 600); 
}); 

Son bon à donner quelque 600m environ pour que l'utilisateur puisse interagir.