Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505

    [jQuery] ritardare evento mouseover

    Ho un calendario, i numeri dei giorni sono dei link, passandoci sopra col mouse si attiva una funzione jQuery che tramite AJAX prende dal server l'elenco degli impegni di quel gioeno e li mostra in un div.
    Funziona, ma avrei bisogno che la funzione venisse attivata con un po' di ritardo in modo che spostando il mouse dal calendario in un altro punto della pagina, gli impegni mostrati non cambiassero solo perché il puntatore è passato mezzo secondo sopra un altro giorno.

    Il codice che uso al momento per attivare la funzione è questo
    codice:
    $('div#eventi-home').on('mouseover', 'a.calday', function() {
    	var $a = $(this),
    		form_data = {
    			day: $a.data('giorno'),
    			month: $a.data('mese'),
    			year: $a.data('anno')
    		};
    	
    	$.ajax({
    		url: "<?php echo base_url('home/events_of_the_day/') ?>",
    		type: 'POST',
    		data: form_data,
    		success: function(msg) {
    			$('div#events-of-the-day').html(msg);
    		}
    	});
    });
    Se serve, i link sono fatti così
    codice:
    <a href="#" class="calday" data-giorno="28" data-mese="11" data-anno="2013" >28</a>'
    Come va modificato per introdurre il ritardo?
    Ultima modifica di Alhazred; 29-11-2013 a 00:57

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    sicuro il mouseover sia il gestore evento piu' opportuno nel caso specifico?
    comunque hoverintent dovrebbe fare al caso

    ciao

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Al momento ho modificato così

    codice:
    $(document).ready(function(){
    	$('div#eventi-home').on('mouseover', 'li.calday', function() {
    		setTimeout(function() {
    			var $li = $(this),
    				form_data = {
    					day: $li.data('giorno'),
    					month: $li.data('mese'),
    					year: $li.data('anno')
    				};
    
    			$.ajax({
    				url: "<?php echo base_url('home/events_of_the_day/') ?>",
    				type: 'POST',
    				data: form_data,
    				success: function(msg) {
    					$('div#events-of-the-day').html(msg);
    				}
    			});
    		}, 1000);
    	});
    })
    Effettivamente risponde dopo 1 secondo, ma non mi appaiono gli impegni del giorno su cui lascio il puntatore, se tolgo il timeout invece torna a funzionare cambiando gli impegni a seconda del giorno su cui mi poso... ma cambiano istantaneamente.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Sto pensando che in realtà questa cosa del ritardo gestita così non funziona, più che un ritardo dovrei poter dira a jQuery: se l'evento mouseover dura più di tot, attiva la funzione, se dura di meno, non fare niente.

    Questo perché il semplice ritardo attiva comunque la funzione.
    Se ad esempio imposto il ritardo ad 1 secondo e passo su un giorno per meno tempo, ad esempio 500ms, la chiamata parte comunque dopo 1 secondo dal momento in cui sono passato su quel giorno.

    A tale scopo, anche hoverintent sembra non essere adatto.

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Come non detto, con hoverintent funziona.
    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.