jQuery trigger klicken, gibt "too much recursion"
Ich bin tryin' zu machen, der Artikel ist der link anklickbar auf den ganzen Artikel zu Raum.
Erstens, ich habe die hover-Sache, die Farbe zu ändern bei mouseover und so weiter... klicken Sie dann auf auf es auslösen sollte, den link, aber das gibt ein "too much recursion".
Ich denke, es ist eine event bubbling
problem. Ich habe versucht, mit zu arbeiten event.cancelBubble = true;
oder stopPropagation()
mit kein Glück. Schlimmer Glück!
jemand?
$("div.boxContent").each(function() {
if ($(this).find(".btn").length) {
var $fade = $(this).find("div.btn a > span.hover");
var $title = $(this).find("h1, h2, h3, h4, h5");
var $span = $(this).find("span").not("span.hover");
var $text = $(this).find("p");
var titleColor = $title.css('color');
var spanColor = $span.css('color');
$(this).css({'cursor':'pointer'}).bind({
mouseenter:function() {
$text.stop().animate({color:linkHover},textAnim);
$title.stop().animate({color:linkHover},textAnim);
$span.stop().animate({color:linkHover},textAnim);
$fade.stop(true,true).fadeIn(textAnim);
}, mouseleave:function() {
$text.stop().animate({color:linkColor},textAnim);
$title.stop().animate({color:titleColor},textAnim);
$span.stop().animate({color:spanColor},textAnim);
$fade.stop(true,true).fadeOut(textAnim);
}, focusin:function() {
$text.stop().animate({color:linkHover},textAnim);
$title.stop().animate({color:linkHover},textAnim);
$span.stop().animate({color:linkHover},textAnim);
$fade.stop(true,true).fadeIn(textAnim);
}, focusout:function() {
$text.stop().animate({color:linkColor},textAnim);
$title.stop().animate({color:titleColor},textAnim);
$span.stop().animate({color:spanColor},textAnim);
$fade.stop(true,true).fadeOut(textAnim);
}
}).click(function() {
$(this).find("div.btn a").trigger('click');
});
}
});
InformationsquelleAutor Thomas | 2011-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den problematischen bit des Codes wird diese:
Dieser sagt: "jedes mal wenn ein click-Ereignis empfangen wird, auf dieses element, auslösen, klicken Sie auf den untergeordneten Elementen". Jedoch, event bubbling bedeutet, dass das Ereignis ausgelöst in dieser Funktion wird dann behandelt, wieder von dieser event-handler, ad infinitum. Der beste Weg, dies zu stoppen ist, denke ich, um zu sehen, ob das Ereignis entstanden ist, auf die
div.btn a
element. Könnten Sieund
- Ereignis.target
:Dieser sagt: "wenn der auf entstanden auf jedes element, abgesehen von einem
div.btn a
-, trigger-ein click-Ereignis aufdiv.btn a
. Dies bedeutet, dass Ereignisse, verursacht durch dietrigger
Anruf nicht behandelt werden, indem Sie diese Funktion. Dies ist überlegen überprüfungevent.target == this
(wie Andy ' s Antwort hat es), weil es fertig werden kann, mit anderen Elementen innerhalb derdiv.boxContent
.div.btn a
element, jedoch als ich bin nicht ein fan der Verwendung von ineffizientenis()
Funktion.Ahh, jetzt verstehe ich! Dies tut den trick. Danke lonesomeday.
InformationsquelleAutor lonesomeday
Einen saubereren Weg, um dieses Problem zu lösen ist, um die das element, das Sie auslösen, den klicken Sie an und legen Sie es außerhalb der ausgelösten element:
Also, wenn Sie diese:
Indem Sie den "div.btn einem" tag außerhalb der "boxContent" div. Vermeiden Sie die Rekursion Schleife alle zusammen.
InformationsquelleAutor pachanka