2016-03-23 12 views
0

ich diese Javascript-Objekt haben:ausblenden Element von Körper, es sei denn bestimmtes Element klicken

StoryGroup = { 
    groupInput: '.story-group-container input[type="text"]', 
    container: '.checkbox-container', 
    submit: '.checkbox-container .filter', 
    body: 'body', 
    init: function() { 
     $(this.groupInput).click(this.showForm.bind(this)); 
     $(this.body).click(this.hideForm.bind(this)); 
    }, 
    showForm: function() { 
     $(this.container).show(); 
    }, 
    hideForm: function(e) { 
     if (e.currentTarget == $(this.groupInput) || e.currentTarget == $(this.container)) { 
      $(this.container).show(); 
     } else { 
      $(this.container).hide(); 
     } 
    } 
} 

Warum ist dies nicht richtig funktioniert? Wenn ich die Funktion 'hideForm' entferne. Die ShowForm-Funktion funktioniert ordnungsgemäß und zeigt meinen 'Container' an, wenn auf die Gruppeneingabe geklickt wird. Ich möchte die Funktion "hideForm" ausführen, wenn irgendwo auf dem Körper geklickt wird, es sei denn, dieser Klick befindet sich in der Eingabe oder im Container. Deshalb gebe ich das "e" ein, um sicherzustellen, dass der Klick nicht auf diesen beiden Elementen erfolgt.

Antwort

1

Sie die Referenzen prüfen, wird offensichtlich sind beide gehen zu sein, das gleiche nicht in Ihrem Fall

hideForm: function(e) { 
    if (!($(e.currentTarget).is(this.groupInput) || $(e.currentTarget).is(this.container))) { 
     $(this.container).hide(); 
    } 
} 

Try .is(selector) in diesem Zusammenhang zu verwenden.

+0

das macht für mich Sinn, aber es scheint nicht mein Problem zu lösen. – JordanBarber

+1

@JordanBarber Können Sie eine einfache Demo Ihres Problems in jsfiddle.net erstellen? Es wäre also leicht für uns, es zu reparieren. –

+0

Ja, gib mir ein paar Sekunden – JordanBarber