2010-10-12 6 views
0

Je construis un portfolio de photographie pour un client et j'ai décidé de le rendre un peu plus interactif. Je me suis débarrassé de tous les boutons sur le site et j'ai eu l'utilisateur d'interagir avec le site en utilisant des coups de touches. Mon code d'origine utilisé:Comment utilisez-vous jquery .live() avec des frappes?

$(document).bind('keydown', function(e) { 

mais cela malheureusement pas permettre à l'utilisateur d'interagir avec les images qui ont été chargés par jquery. Le visiteur ne pouvait donc interagir qu'avec la première image. J'ai regardé autour de moi et j'ai découvert que la méthode .live() était censée lier un événement à tous les objets, qu'ils soient chargés lors du chargement du document ou après le fait. Mais pour une raison quelconque, cela ne fonctionne pas avec mon code. J'utilise jquery 1.4.2 et ceci est un échantillon de mon code:

$(document).live('keydown', function(e) { 

if (e.keyCode == 32) { 

    var imgwidth = $('#gallery img').attr('width'); 

    if(imgwidth == 640) { 

    $('#content div#image').removeClass('large'); 

    $('#content img').removeClass('large'); 

    }else{ 

    $('#content div#image').addClass('large'); 

    $('#content img').addClass('large'); 

    } 
    return false; 
    }; 
}); 

Toute aide serait grandement appréciée!

Répondre

0

Je ne pense pas que le problème soit lié à la manière dont vous liez les événements.

l'intérieur de votre gestionnaire d'événements, vous faites par exemple:

var imgwidth = $('#gallery img').attr('width'); 

Cela vous donnera la largeur de la première image (voir les attr docs).

Comment déterminez-vous l'image avec laquelle l'utilisateur interagit? Si elle a un focus, alors vous pouvez faire, par exemple,

$('#gallery img').live("keydown", function(e) { 
    // here, 'this' is the DOM image object, and $(this) is the jQuery object for it 
    // ... 
}); 

... mais le point est, vous avez besoin d'une certaine façon de laisser l'ordinateur déterminer quelle image l'utilisateur a l'intention d'interagir avec.

+0

La partie imgwidth n'a besoin que de trouver la première image. Je l'ai là pour déterminer si l'état a été basculé ou non, donc vous pouvez appuyer sur espace une fois pour agrandir les images dans #gallery, puis de nouveau pour se débarrasser de la classe qui les agrandit. Le div #gallery est remplacé par de nouvelles images chaque fois que l'utilisateur appuie sur les touches fléchées. J'ai jeté un exemple en ligne: http://werchris.com/emily. J'ai d'autres événements clés dans le keypress, donc le réglage de live() à #gallery img résoudrait le problème? –

+0

@Chris Anderson: vous ne devriez pas avoir plusieurs éléments avec le même ID (par exemple 'id =" image "') – sje397