2010-03-26 6 views
3

J'essaie d'ajouter la fonction JavaScript setTimeout() à mon expression jQuery. Sans la setTimeout() ma fonction charge une vue partielle avec des informations mises à jour lorsque je saisis du texte dans ma zone de texte. Mais, il charge l'information à chaque frappe. Ma logique est que si je peux mettre dans une minuterie, puis lorsque l'utilisateur arrête de taper, une seconde plus tard, les données sont mises à jour.Utilisation de "setTimeout()" dans mon expression jQuery

Comme vous pouvez le voir, j'ai essayé de mettre un setTimeout() mais cela ne semble pas fonctionner.

$(function() { 
    $('#DocId').live('keyup', function() { 
     setTimeout(var styleValue = $(this).val(); 
     $('#tableContent').load(
     '/CurReport/TableResults', 
     { style: $(this).val()}), 1000); 

    }), 
}); 

Merci,

Aaron

Répondre

5

Vous pouvez utiliser .data() et mettre dans une temporisation qui remet à zéro chaque frappe comme ceci:

$('#DocId').live('keyup', function() { 
    clearTimeout($.data(this, 'timer')); 
    var val = $(this).val(); 
    var wait = setTimeout(function() { 
    $('#tableContent').load('/CurReport/TableResults', { style: val }); 
    }, 1000); 
    $(this).data('timer', wait); 
}); 

Ceci définit un délai d'attente de 1 seconde chaque frappe sur l'élément qu'il a tapé (peut avoir un certain nombre de ceux-ci allant à la fois). Chaque frappe efface la minuterie précédente et en définit une nouvelle, donc seulement après 1 seconde complète de ne pas taper, la fonction se déclenchera.

Remarque: ne supprimez pas la partie var val = $(this).val();, vous avez besoin de la variable car this est un contexte différent lorsque la fonction s'exécute réellement.

+0

Merci pour votre aide. J'ai remarqué que c'est vous qui avez répondu à la plupart de mes questions JavaScript. –