checkbox innerhalb span onclick der span.. check input.. jquery Rekursion problem
Dieser code bewirkt, dass ein Rekursives Verhalten.
Ich möchte in der Lage sein, um Sie auf den text in den span und aktivieren/deaktivieren Sie das Kind-input und trigger-click-Ereignis für das Kind-input.
http://jsfiddle.net/cwfontan/ALEBr/
<span class="RedHover">
<input type="checkbox" name="chkShowBusn" id="chkShowBusn" tabindex="9" />Business
</span>
$('.RedHover').click(
function (e) {
try {
$(this).children('input').trigger('click');
e.stopPropagation();
e.preventDefault();
console.log('here');
} catch (e) {
//handle no click event.alert
console.log(e.description);
}
}
);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Und Sie nicht sogar brauchen, jQuery...
Das problem ist, dass das Ereignis ausgelöst, auf das
input
element dann Blasen bis die bearbeitet wird auf derspan
. Dies geschieht für den ursprünglichen Fall und für den Fall, dass Sie Feuer programmgesteuert.Die Lösung ist wahrscheinlich zu überprüfen, um zu sehen, ob das Ereignis entstanden ist, auf eine
input
element, und nicht, es zu handhaben, wenn es ihn:Den
try/catch
unnötig war, jQuery wird sichergestellt, dass das event-Objekt immer vorhanden ist, und die Methoden, die Sie verwenden.Die Aufrufe
stopPropgation
undpreventDefault
kann unnötig sein können, abhängig von Ihrem erwarteten Verhalten.Da die
span
hat nur ein Kind, Sie tun konnte, einen anderen Weg Runde. Wennthis
(das element, an dem das Ereignis behandelt wird, immer diespan
) ist das gleiche wiee.target
(das element, an dem das Ereignis stammt, wird entweder derspan
oder dieinput
), können Sie Vorgehen:Beachten Sie, dass diese viel weniger stabil als die überprüfung der
nodeName
: wenn Sie verändert Ihre HTML in Zukunft, es kann brechen Sie diesen code.Können Sie stoppen die Ausbreitung in das klicken auf den checkbox, wie so
überprüfen Sie diese jsfiddle
Ich hatte ein ähnliches problem und fand, dass dies die Lösung sein.
HTML
Javascript (Erweiterung zu jQuery ist ganz einfach, ich bin nicht mit, da es beantwortet wurde von @lonesomeday, und ich habe immer lieber Javascript über die Verwendung einer anderen library)
Diese Weise können Sie es verwenden die gleiche, als wenn Sie mit einem label. Dies kann tatsächlich Hinzugefügt werden, um jede Art von element.
Diese wurde erweitert, aus der Antwort von @lonesomeday