2013-06-06 2 views
0

Comment puis-je faire ce travail.comment obtenir le parent de la cible

Si le parent de la cible est .form_contact_div, puis console.log ('keep open form'); Code J'utilise mais cela ne fonctionne pas pour (sinon if) condition ne fonctionnant que pour le if et else.

code:

jQuery("body").click(function(e) { 

    var target = jQuery(e.target); 
    console.log(target); 

    if(jQuery(target).parents('#contact-btn-div').length 
     && jQuery('#contact-btn-div').hasClass('close')) { 
     console.log('keep open btn'); 
     jQuery("#form_contact_wrapper").animate({'left': '0px'}); 
     jQuery("#contact-btn-div").removeClass('close'); 
    } 
    else if(jQuery(target).parent().is('.form_contact_div')) { 
     console.log('keep open form'); 
     jQuery("#form_contact_wrapper").animate({'left': '0px'}); 
    } 
    else{ 
     console.log('keep close'); 
     jQuery("#form_contact_wrapper").animate({'left': '-472px'}); 
     jQuery("#contact-btn-div").addClass('close'); 
    } 
}); 
+0

Utilisez-vous IE? – Amit

+1

Si vous enveloppez votre code dans une fonction de document prêt et passez '$' comme param, vous pouvez enregistrer un tas d'octets, plus il aura l'air plus propre. – elclanrs

+0

_note_: La variable 'target' est déjà retournée par' jQuery', il n'est donc pas nécessaire de la passer à jQuery: 'jQuery (target)'. –

Répondre

0

Essayez de remplacer e.taget avec ce comme

var target = $(this); 

Parce que vous avez besoin pour obtenir l'élément cliquée comme Taget alors mieux utiliser cela et votre code devrait être comme ça

jQuery("body").click(function(e) { 

    var target = $(this); 
    console.log(target); 

    if(target.parent('#contact-btn-div').length 
     && jQuery('#contact-btn-div').hasClass('close')) { 
     console.log('keep open btn'); 
     jQuery("#form_contact_wrapper").animate({'left': '0px'}); 
     jQuery("#contact-btn-div").removeClass('close'); 
    } 
    else if(target.parent().is('.form_contact_div')) { 
     console.log('keep open form'); 
     jQuery("#form_contact_wrapper").animate({'left': '0px'}); 
    } 
    else{ 
     console.log('keep close'); 
     jQuery("#form_contact_wrapper").animate({'left': '-472px'}); 
     jQuery("#contact-btn-div").addClass('close'); 
    } 
}); 
+0

Je reçois cette erreur en utilisant ce TypeError Uncaught: Objet # n'a pas de méthode 'parents' – RIK

+1

Désolé voir mon édition .... il devrait être parent pas les parents – Gautam3164

0

Voir le code édité.

<div id="contact-btn-div" class="close" style="width:300px; height:200px; border:1px solid #666; background-color:#F60;"> 

<div style="width:200px; height:100px; border:1px solid #0FC; background-color:#9CC;"></div> 
</div> 

Et le Javascript,

$(function(){ 
$("body").click(function(e) { 

var target = $(e.target); 
console.log(target); 

if(target.parent('#contact-btn-div').length 
    && $('#contact-btn-div').hasClass('close')) { 
    console.log('keep open btn'); 
    $("#contact-btn-div").removeClass('close'); 
} 

}); 
}); 

Je pense que vous obtiendrez ce que vous avez besoin. À votre santé :).

+0

@ Gautam3164: Votre $ (this) donnera BODY Object chaque fois que vous cliquez n'importe où, c'est pourquoi votre logique échouera. $ (e.target) est la seule option ici. À votre santé. –