J'ai actuellement un script qui va vérifier la valeur d'une zone de sélection, puis activez un champ de texte juste à côté de celui-ci, puis de définir la mise au point.
J'ai ceci pour le moment qui fonctionne Bien pour permettre au champ d'entrée ... p> Je suis un peu coincé sur le "Focus" pour être honnête, j'ai essayé "$ (ceci). "entrée"). Focus (); " Mais cela n'a pas été concentré du tout, bien que cela n'ait pas apporté une erreur JavaScript ... P> $("#assessed select").change(function () {
if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); $(this).next('input').focus(); }
else { $(this).next('input').removeAttr("disabled"); }
});
3 Réponses :
Je pense que votre problème peut être qu'il n'est pas possible de mettre l'accent sur une commande d'entrée désactivée (au moins dans certains navigateurs / systèmes d'exploitation).
Votre Comme ceci: p> Focus () code> L'appel est Fondamentalement dans le mauvais bloc - il devrait être dans le bloc
sinon code>, pas le bloc
si code> bloc. p>
$("#assessed select").change(function () {
if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); }
else { $(this).next('input').removeAttr("disabled"); $(this).next('input').focus(); }
});
Hah! Merci beaucoup Rob ... Je viens de comprendre que je me suis concentré sur le «si» et pas le «autre»! Erreur d'écoliers absolue, désolé et merci beaucoup - n'était pas avant de poster que je me suis rendu compte :)
N'oubliez pas de cacher le $ (ceci) plutôt que de l'appeler plusieurs fois
modifié de la réponse ci-dessus avec cached cet objet JQ. De plus, le filtre à l'intérieur suivant n'est pas nécessaire. suivant () ne retournera jamais que le prochain frère. Le filtre dit essentiellement de me faire passer le prochain uniquement s'il s'agit d'une entrée ou du filtre que vous donnez. Si vous êtes sûr que le prochain est l'objet souhaité, il n'est pas nécessaire d'inclure le filtre.
$("#assessed select").change(function () { var $this = $(this); if( $this.val() === 'null') { $this.next() .attr("disabled", true); } else { $this.next() .removeAttr("disabled") .focus(); } });
Absolument parfait, et une solution bien meilleure que ce que j'utilisais, merci!
a également trouvé un joli petit plugin pour obtenir la prochaine entrée: http://jqueryminute.com/set-focus-a-the-next-input-field-with-jquery/
$.fn.focusNextInputField = function() { return this.each(function() { var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(':hidden'); var index = fields.index( this ); if ( index > -1 && ( index + 1 ) < fields.length ) { fields.eq( index + 1 ).focus(); } else {fields.first().focus();} return false; }); };
J'ajouterais .not (': caché') code> dans la déclaration champs, alors seuls les éléments visibles sont sélectionnés. En outre, ajoutez
else {champs.first (). Focus ();} code> Pour mettre l'accent sur le premier élément.
Pourquoi recherchez-vous des parents: EQ (0) d'abord?
@Serge Il sélectionne la forme parent que l'élément d'entrée est dans. Je ne sais pas si le "EQ (0)" est nécessaire, pas mon code que je ne suis pas sûr.
Bonne idée @collink - je l'ai ajouté dans
J'ajouterais également un .not (': désactivé ») code> dans la déclaration champs, seuls les éléments non désactivés sont sélectionnés.
Pourriez-vous publier votre HTML aussi?