2010-06-14 8 views
1

J'ai un champ de recherche et un bouton de recherche, lorsque le bouton est cliqué avec le texte par défaut dans le champ de texte, ou une valeur nulle, une alerte apparaît et met le focus sur le champ de recherche. Cela fonctionne très bien sur tous les principaux navigateurs, mais pas en safari.focus() Fonction jQuery ne fonctionne pas dans Safari, mais fonctionne bien sur tous les autres navigateurs?

Je l'ai essayé même sans jquery, mais n'a pas fonctionné. Lorsque l'accent tombe sur le champ de texte de recherche, j'ai une autre fonction jQuery, est-ce le problème.

Le code qui met l'accent sur le texte de recherche est:

if (defaults.keyword == SEARCH_TIP || defaults.keyword == '') { 
    alert(SEARCH_NULL); 
    $('#store_search_keyword').focus(); 
    return false; 
} 

Le code sur le focus est:

var search_dom = $('#store_search_keyword'); 
var search_text = search_dom.val(); 
search_dom.focus(function(){ 
    if ($(this).val() === SEARCH_TIP) { 
     $(this).val(''); 
    } 
}); 

toute aide est appréciée, merci ..

+0

Voir http://stackoverflow.com/questions/2913175 – Pointy

Répondre

2

Vous devez appeler le DOM natif focus() méthode, comme ceci:

document.getElementByID('store_search_keyword').focus(); 
+0

J'ai essayé cela, n'a pas fonctionné. J'ai une autre fonction sur le point, je ne suis pas sûr que c'est la cause de tous ces problèmes? – pMan

0

Cela ne fonctionne pas correctement dans Safari.

http://whatsthepointy.blogspot.com/2010/05/safari-focus-and-popup-alerts.html

Le problème est causé par cette "alerte()" dans votre gestionnaire. Safari ne se rend pas compte que sa fenêtre principale regagne l'attention une fois la boîte d'alerte effacée, et lorsque Safari ne pense pas que c'est l'application ciblée, elle ne fait pas attention aux appels .focus() sur quoi que ce soit.

+0

Mais j'ai aussi ce problème SANS utiliser alert() J'ai essayé d'utiliser la fonction suivante (en utilisant jQuery) dans un événement de clic de bouton: setTimeout (function() {$ ("# input_name") [0 ] .focus();}, 2000) Lorsque l'utilisateur clique sur un autre élément d'entrée, par exemple "#input_zip" après avoir cliqué sur le bouton, Safari sur iOS affichera le clavier à l'écran. Après deux secondes "#input_zip" perdra le focus, le clavier disparaitra mais "#input_name" n'aura jamais le focus!?!?! – Klaus

+0

Peut-être que l'apparence du clavier a un effet similaire à celui de la boîte de dialogue "alert()". Safari pense que ce n'est pas l'application de premier plan à cause du clavier, donc il ignore vos appels à ".focus()". (Je ne sais pas exactement, et je n'ai jamais fait de web mobile, mais je sais que Safari est très ferme pour refuser les appels à "focus()" quand ce n'est pas l'application de premier plan, et c'est assez bête aussi dans au moins le cas "alerte()". – Pointy