2010-06-16 4 views
3

J'ai ce script simple qui attrape tous les clics de souris, sauf si vous cliquez sur quelque chose qui fonctionne réellement. Liens, vidéos flash, etc. Comment puis-je ajuster ceci de manière à ce que l'utilisateur clique dessus, avant que la vidéo ne se charge, les nouvelles charges de page, etc. Il envoie la simple requête GET que j'ai créée?Catch/Intercept tous les clics de souris

(function($) { 

$.fn.saveClicks = function() { 
$(this).bind('mousedown.clickmap', function(evt) { 
    var clickDocument = (document.documentElement != undefined && document.documentElement.clientHeight != 0) ? document.documentElement : document.body; 
    var width = clickHeatDocument.clientWidth != undefined ? clickDocument.clientWidth : window.innerWidth; 
    var height = clickHeatDocument.clientHeight != undefined ? clickDocument.clientHeight : window.innerHeight; 
    var scrollx = window.pageXOffset == undefined ? clickDocument.scrollLeft : window.pageXOffset; 
    var scrolly = window.pageYOffset == undefined ? clickDocument.scrollTop : window.pageYOffset; 
    var x = evt.clientX + scrollx; 
    var y = evt.clientY + scrolly; 
    $.get('/click-save.php', { 
     "x":x, 
     "y":y, 
     "click":"true", 
     "w":width, 
     "h":height, 
     "l":escape(document.location.pathname), 
     "d":escape(document.domain) 
    }); 
}); 
}; 

})(jQuery); 

$(function() { 
    $(document).saveClicks(); 
}); 

Répondre

2

Je pense que le mieux serait d'utiliser la liaison en direct et le * sélecteur

$('*').live('click.clickmap', function(evt){ ... }); 

également l'appel ajax faudra peut-être synchrone (vous devez utiliser .ajax() pour ce .. (je ne sais pas si c'est nécessaire, pour éviter que l'appel get ne soit interrompu par un lien normal, cliquez sur)

+0

J'utilisais simplement get() car je n'ai pas besoin de réponse du serveur. J'ai essayé votre exemple, et cela semble avoir bien fonctionné! – Nathan

+0

@Hallik, normalement 'get' est utilisé pour ** obtenir ** une réponse du serveur .. utilisez' post' si vous voulez faire une action qui modifie quelque chose .. voir [Quand utilisez-vous POST et quand GET] (http://stackoverflow.com/questions/46585/when-do-you-use-post-and-when-do-you-use-get) –

+0

mais ne fait PAS faire deux appels, et GET ne fait qu'un ? J'essayais juste de faire aussi peu d'appels que possible, et je pensais que GET serait plus léger. – Nathan

1

Ne pouvez-vous pas lier les événements click à un caractère générique? C'EST À DIRE.

$('*').bind('mousedown.clickmap', function(evt){

//do stuff

});

Questions connexes