2010-10-03 11 views
8

J'utilise jQuery et je veux permettre à l'utilisateur d'appuyer sur Entrée après avoir entré des données dans un champ de recherche pour lancer la recherche.jQuery keyup et 'entrer' dans Safari

J'utilise le code suivant:

 $('#textSearch').keyup(function (event) { 
      if (event.keyCode == '13') { 
       doSearch(); 
      } 
      return false; 
     }); 

Il fonctionne parfaitement dans Firefox et IE, mais pas du tout dans Safari. Qu'est-ce qui se passe, c'est que le formulaire est soumis lorsque je frappe entrer en safari et ce n'est pas ce que je veux.

Ajout de onsubmit = "return false;" à la forme fonctionne mais n'est pas une option car la balise de formulaire est sur une page maître d'une page asp.net et j'ai besoin que le formulaire soit soumis sur d'autres pages.

Existe-t-il un moyen de faire fonctionner cette fonctionnalité dans Safari? J'ai également essayé de montrer juste une alerte au lieu de la fonction de doSearch(). L'alerte apparaît bien mais après que le formulaire est soumis.

Répondre

4

Browsers peuvent varier à quel événement déclenche une soumission. Dans ce cas, Safari peut être soumis sur l'événement keydown.
Vous pouvez regarder pour le soumettre événement sans changer le balisage et l'annuler:

$('#the-id-of-the-form').submit(function(e) { 
    e.preventDefault(); 
}); 

Vous pouvez écouter l'événement keyup et le manipuler comme vous le faites maintenant.

+0

A travaillé parfait! Merci! :) – Martin

3

Essayez ceci:

$('#textSearch').keyup(function (event) { 
     var key = event.keyCode || event.which; 

     if (key === 13) { 
      doSearch(); 
     } 
     return false; 
    }); 
+0

Merci! J'ai essayé ça mais ça n'a pas fait de différence. J'ai également mis à jour la question avec plus de détails. – Martin

1

add prévenir DEAULT

$('#textSearch').keyup(function (event) { 
    if (event.keyCode == '13') { 
     event.preventDefault(); 
     doSearch(); 
    } 
    return false; 
}); 
+0

Merci, mais il soumet toujours la forme .. – Martin

0

J'utilise "keydown" parce que "keyup" n'a pas fonctionné pour moi. J'avais aussi besoin de cette entrée pour être désactivée avec les champs de saisie que j'ajoute avec AJAX, donc le "live".

Vous devrez associer un gestionnaire de "modification" au champ. Cette version quitte le champ ("flou") puis déclenche un changement sur le terrain, puis déclenche le changement. Sans le flou, le changement est déclenché deux fois!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
} 
); 
0

J'utilise "keydown" parce que "keyup" n'a pas fonctionné pour moi. J'avais aussi besoin de cette entrée pour être désactivée avec les champs de saisie que j'ajoute avec AJAX, donc le "live".

Vous devrez associer un gestionnaire de "modification" au champ. Cette version quitte le champ ("flou") puis déclenche un changement sur le terrain, puis déclenche le changement. Sans le flou, le changement est déclenché deux fois!

$('#textSearch').live('keydown', function(event) { 
    if(event.keyCode == 13) 
    { 
    $(event.target).blur(); 
    $(event.target).change(); 
    event.preventDefault(); 
    return false; 
    } 
}); 
Questions connexes