Pourquoi mon onchange fonction appelée deux fois lors de l'utilisation .focus()?

TLDR

  • Cochez cette exemple dans google chrome.
  • Type un truc et appuyez sur tab. voir une nouvelle boîte de dialogue apparaît
  • taper quelque chose et appuyez sur enter. voir le deux nouvelles zones apparaissent, où l'on est attendu.

Intro
J'ai remarqué que lors de l'utilisation de enter plutôt tab pour modifier les champs, ma fonction onchange sur un champ de saisie, tira deux fois. Cette page était plutôt grand, et toujours en développement (lire: de nombreux autres bugs), j'ai donc fait un exemple minimal qui affiche ce comportement, et dans ce cas, il n'a même sur tab. Ce n'est un problème dans Chrome aussi loin que je peux dire.

Ce qu'il doit faire
Je veux faire une nouvelle entrée une fois que quelque chose est entré dans l'entrée-champ. Ce champ doit obtenir le focus.

Exemple:

javascript qui ont besoin de jquery

function myOnChange(context,curNum){
      alert('onchange start');
      nextNum = curNum+1;
      $(context.parentNode).append('<input type="text" onchange="return myOnChange(this,'+nextNum+')" id="prefix_'+nextNum+'" >');
      $('#prefix_'+nextNum).focus();
      return false;
}

HTML-partie

<div>
    <input type="text" onchange="return myOnChange(this,1);" id="prefix_1">
</div>

le code complet est sur pastebin. vous devez ajouter votre chemin à jquery dans le script

Un exemple de travail est ici sur jFiddle

Le onchange est appelée deux fois: La myOnChange fonction est appelée, fait de la nouvelle entrée, appelle la focus(), le myOnChange est appelée de nouveau, fait une nouvelle entrée, le "intérieure" myOnChange sorties et puis le 'extérieur' myOnchange sorties.

Je suppose que c'est parce que le changement de focus les feux de la onchange()?. Je sais qu'il ya une certaine différence de comportement entre les navigateurs.

Je voudrais l'arrêter .focus() (ce qui semble être le problème) de ne PAS appeler le onchange(), donc myOnChange() n'est pas appelée deux fois. Quelqu'un sait comment faire?

OriginalL'auteur Nanne | 2011-03-02