2009-07-07 5 views
1

J'essaie d'utiliser une boîte de recherche Ajax \ suggestion. J'utilise jQuery pour gérer la zone de texte perdre le focus. Cependant, lorsque je clique sur un lien dans la liste des suggestions, jQuery déclenche l'événement de flou et le lien n'est pas suivi. Voici le code jQuery:jQuery Blur Fires Avant href

$(document).ready(function() { 

    $('#lstxt').click(function() { 
     this.value = ''; 
    }); 
    $('#lstxt').blur(function() { 
     this.value = 'Database Search'; 
     document.getElementById('ls').innerHTML=''; 
     document.getElementById('ls').style.border='0px'; 
    }); 
}); 

Comment puis-je obtenir à ne pas tirer .blur si un lien est cliqué dans la liste des suggestions (id = « ls_table »)?

Répondre

0

essayer ce code:

$(document).ready(function() { 

    $('#lstxt').click(function() { 
     this.value = ''; 
     return true; 
    }); 
    $('#lstxt').blur(function() { 
     this.value = 'Database Search'; 
     $('#ls').html('').css('border',"0px"); 
     return true; 
    }); 
}); 

modifier: flou se déclenche si vous cliquez en dehors d'une zone de texte. est lstxt une zone de texte?

éditer2: vous aurez besoin de délier l'événement de flou et de le relier conditionnellement. je aurais besoin plus d'informations au sujet de votre mise en page pour vous dire comment faire

6
var global_switch = false; 
$('#ls_table').hover (
    function() { global_switch = true; }, 
    function() { global_switch = false; } 
) 
$('#lstxt').blur(function() { 
    if (global_switch) { return; } else { ...}); 

Ceci est juste une preuve de concept. Comme toujours, les variables globales sont mauvaises. Jetez un oeil à data API jQuery pour le contourner.

Cheers,

+0

c'est une bonne suggestion que nous avons utilisé, +1;) – Bozho

3

La méthode que j'utilisé lors de la mise en œuvre de mon propre est l'ajout d'un léger retard:

$('#lstxt').blur(function(){ 
    setTimeout(function(){ 
     // original blur code here 
    }, 250); 
}); 

Certainement pas la meilleure solution (mais en général fonctionne). Mais la solution de Boldewyn devrait fonctionner - en supposant que #ls_table a été créé avant d'essayer de l'assigner. Si vous créez/détruire #ls_table fréquemment, vous pouvez lier l'événement à l'élément parent:

// just using the data API for jquery. 
$('#ls').hover(
    function(){ $('#ls').data('autocompleteover', 1); }, 
    function(){ $('#ls').data('autocompleteover', 0); } 
); 
$('#lstxt').blur(function(){ 
    if($('#ls').data('autocompleteover')) 
     return; 
    // original blur code here 
} 
+0

Ce n'est pas la bonne façon. Mais jusqu'à maintenant, c'est la meilleure façon de savoir comment travailler, même la fonctionnalité de flou est là –

0

Je gère le même problème (avec quelques validateur personnalisé sur le flou, qui a été tiré avant le clic sur le bouton de fermeture - mais Je veux fermer boîte de dialogue (cliquez) sans cet événement flou tiré) Code sur l'entrée (avec validateur):

 .. 
     $(this).blur({validators: validators}, function(event){ // blur             
     (function($this){ 
     validator_timeout = setTimeout(function(){ // validator_timeout is global 
      $this.validate(event.data.validators); // do some validation 
     }, 50); // delay just minimum of time, but enough to let other event to be fired 
     }($(this))); // passing $(this) to function 
     });... 

et sur d'autres gestionnaire d'événements, comme dialogue étroit, quand nous ne voulons pas appeler la fonction sur validez, effacez simplement validator_timeout pour supprimer le flou:

click_function = function(){       
     clearTimeout(validator_timeout); 
     $(this).dialog("close"); 
    } 

Espérons que ce sera utile pour quelqu'un.