IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Maintiens du focus sur un élément


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut Maintiens du focus sur un élément
    Bonjour je suis en train de réaliser un plugin permettant de construire des tableaux de calculs avec un certains niveau de contrôle. L'utilisateur pourra par exemple sélectionner des lignes dans le but de les monter ou de les descendres ou encore les supprimer. Le fonctionnement de ces mécanismes est géré via des boutons et fonctionne correctement. Cependant j'ai un problème lorsque je souhaite gérer ces contrôles via clavier.

    En effet j'ai ajouté des "events" "keyup" et "keypress" afin de savoir lorsque l'utilisateur appuis sur les touches haut et bas. En fonction de la touche j'appelle l'une de mes deux fonctions de mouvement pour monter ou descendre une ligne cependant l'action ne fonctionne qu'une seule fois.

    D'après ce que je visualise l'action fonctionne car la ou les lignes sélectionnées sont bien focus dès la fin de l'action je perd le focus sur cet élément et donc l'écouteur ne fait plus effet et l'action ne se réalise pas plus d'une fois.

    Une méthode pour descendre une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    downRow: function ( e ) {
    	var selector = [],
    		rows = Array.prototype.slice.call( this.elt.querySelectorAll( 'tbody tr' ) ).reverse( )
    	rows.forEach( function ( row, i ) {
    		if( rows.indexOf( row ) ) {
    			if( row.classList.contains( 'selected' ) && i !== 0 ) {
    				selector.push( row )
    				$.when( row.parentNode.removeChild( row ) ).then( function( ) {
    					rows.splice( i, 1 )
    					rows[i-1].insertAdjacentElement( 'afterEnd', row )
    					rows.splice( i-1, 0, row )
    				} )
    			}
    		}
    	} )
    	this.totalizer( )
    },
    Méthodes pour écouter et appliquer les events
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    listen: function ( ) {
    	this.$elt
    	.on( 'change', '.mt-cell-selector', $.proxy( this.selectRow, this ) )
    	.on( 'change', '.mt-cell-selector-all', $.proxy( this.selectAll, this ) )
    	.on( 'change', '.mt-cell-input', $.proxy( this.rowCalc, this ) )
    	.on( 'keypress', $.proxy( this.keypress, this ) )
    	if( this.eventSupported( 'keydown' ) ) {
    		this.$elt.on( 'keydown', $.proxy( this.keydown, this ) )
    	}
    	$( '.mt-ctrl-del' ).on( 'click', $.proxy( this.remove, this ) )
    	$( '.mt-ctrl-up' ).on( 'click', $.proxy( this.upRow, this ) )
    	$( '.mt-ctrl-down' ).on( 'click', $.proxy( this.downRow, this ) )
    },
    eventSupported: function( eventName ) {
    	var isSupported = eventName in this.$elt
    	if( !isSupported ) {
    		this.$elt.setAttribute( eventName, 'return;' )
    		isSupported = typeof this.$elt[eventName] === 'function'
    	}
    	return isSupported
    },
    move: function ( e ) {
    	switch( e.keyCode ) {
    		case 38: // up arrow
    			e.preventDefault( )
    			this.upRow( )
    		break
    		case 40: // down arrow
    			e.preventDefault( )
    			this.downRow( )
    		break
    	}
    	e.stopPropagation( )
    },
    keydown: function ( e ) {
    	this.suppressKeyPressRepeat = ~$.inArray( e.keyCode, [40,38,9,13,27] )
    	this.move( e )
    },
    keypress: function ( e ) {
    	if( this.suppressKeyPressRepeat ) return
    	this.move( e )
    }
    J'espère avoir été clair d'avance merci de l'aide

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    peut être serait-il souhaitable que tu fasses un petit exemple simple de mise en application de tes méthodes afin de pouvoir identifier/visualiser le problème.

Discussions similaires

  1. AdvancedDatagrid Focus sur dernier élément
    Par caporaldead dans le forum Flex
    Réponses: 1
    Dernier message: 30/03/2011, 11h38
  2. Focus sur un élément div
    Par Sanceray3 dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 23/03/2010, 20h29
  3. Focus sur dossier "éléments supprimés"
    Par Ptikir dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 23/11/2009, 12h20
  4. [JTable] maintien du focus sur une ligne
    Par rednik dans le forum Composants
    Réponses: 3
    Dernier message: 20/08/2008, 17h37
  5. Focus sur un élément d'une combobox
    Par zoidy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/06/2006, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo