2012-04-13 10 views
1

Ich habe das Textfeld:Was ist falsch an meinem Body-Click-Event?

<input type='text' id='title' name='title'> 
<div id='error' class='error'></div> 

Wenn der Benutzer aus dem Textfeld klickt und es ist ein Validierungsproblem, das div „Fehler“ erscheinen.

Was ich tun möchte, ist das kleine Div ausblenden, wenn der Benutzer irgendwo im Körper klickt. Ich habe e.stopPropagation im Body-Click-Event versucht, aber nicht funktioniert.

Die div erscheint nie da, wenn ich aus dem Textfeld verschwimmen, es ist ein Körper klicken betrachtet hat

Bitte lassen Sie mich wissen, wenn Sie eine Idee haben. Grüße

EDIT: Ich habe den Code aktualisiert. Der Code innerhalb des body-click-Ereignisses soll den "error" -div verbergen, wenn alles außer dem Textfeld angeklickt wird, aber nicht zum Funktionieren gebracht werden kann.

$('body').click(function(event){ 
     if ($(event.target).closest('#title').get(0) == null) { 
      $("#error").hide(); 
      }}); 

// Validation 
$('#title').blur(function(){ 
    var titleinput=$('#title').val(); 
    if (titleinput.length <30 || titleinput.length >50){ 
     $('#error').text('Your title must be between 30 and 50 characters').show(); 
     } 
    }); 
+0

wenig edit: machte einen kleinen Fehler mit dem Namen des Fehlers div. Das Problem ist immer noch das gleiche. – alexx0186

+1

"Überall im Körper" ist die gesamte anklickbare Webseite. Einschließlich der ''. Es gibt keinen Platz auf der Seite, auf den der Benutzer klicken kann, um _is not_ the '' anzuklicken. Ändern Sie Ihre Anforderungen. –

+0

Ihr Body-Click-Handler wurde nicht richtig geschlossen, aber ich vermute, das ist ein Tippfehler? – karim79

Antwort

3

Leider seit blur und click verschiedene Ereignisse sind, können Sie nicht stopPropagation verwenden. Der einzige Weg, um darüber nachzudenken, ist, es zu fälschen. Sie können den ersten Klick ignorieren, der innerhalb eines Bruchteils einer Sekunde des Ereignisses blur auftritt.

http://jsfiddle.net/LeNDp/1

var ignoreClicks = false; 
var timer; 

$("body").click(function() { 
    if(!ignoreClicks){ 
     $("#msg").fadeOut(); 
    }else{ 
     if(timer) clearTimeout(timer); 
     ignoreClicks = false;   
    } 
}); 

$("input").blur(function(e) { 
    ignoreClicks = true;  
    $("#msg").stop(true,true).show(); 

    if(timer) clearTimeout(timer); 
    timer = setTimeout(function(){ignoreClicks=false;}, 250); 
});​ 
+0

Hallo, vielen Dank für Ihre Nachricht. Das hat es für mich getan. Grüße – alexx0186

+0

Woher weißt du, dass 'blur' vor' click' ausgelöst wird? Ist das in den Dokumenten für jQuery? –

+0

@CrazyJugglerDrummer Ich bin mir eigentlich nicht sicher, ob das garantiert ist oder nicht. Meiner Erfahrung nach ist dies der Fall. Es wäre nicht in den jQuery-Dokumenten enthalten, es könnte Browser-abhängig sein. –

Verwandte Themen