Ich habe eine Menge von jQuery-Code so gesehen, unnötig zu sagen, ich mag es nicht:jQuery Ereignisbindung und Handhabung
<div id="myDiv">
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
<a class="clickable" href="#">Click Me</a>
</div>
<script>
$(document).ready(function(){
$('clickable').click(function(){
// Do some stuff...
});
});
</script>
Ich weiß, die Menschen dies tun, weil die obige Ereignisbindung und Handhabung erfordert, dass die HTML-Struktur auf der Seite verfügbar ist, aber es führt dazu, die Präsentation, die Logik und die Konfiguration in den Ansichten der Website zu mischen. Außerdem ist es sehr schwierig, die Logik mit fast jedem Debugger zu debuggen.
Also, ich habe Codierung wie diese begann, auf eine separate Js (fiddle here) Datei:
// BEGIN: Event Handlers
var onLoad = function(){
$('.clickable').data('clicked', false);
};
var onMyDivClick = function(){
var clicked = $(this).data('clicked');
if (clicked) {
$(this).trigger('myCustomEvent');
} else {
alert('you clicked me');
$(this).data('clicked', true);
}
};
var onMyCustomEvent = function(){
$(this).css('color', 'dimGray');
alert('please don\'t click me again');
};
// END: Event Handlers
// BEGIN: Event Binding
$(window).on('load', onLoad);
$(document).on('click', '.clickable', onMyDivClick);
$(document).on('myCustomEvent', '.clickable', onMyCustomEvent);
// END: Event Binding
Nun, ich weiß nicht über die Struktur, die auf Seite kümmern müssen. Ich muss nicht alles einpacken Und ich muss nicht darauf achten, ob die Struktur mit Ajax geladen wird oder nicht.
Frage 1 Gibt es irgendwelche Nachteile bei der Annäherung? Bisher habe ich keine gefunden. Bevor wir jedoch den Großteil des Codes auf unseren Websites umgestalten, würde ich gerne über die möglichen Vorbehalte sprechen.
Frage 2 Wie könnte dieser Ansatz mit den neuesten jQuery-Funktionen noch weiter verfolgt werden?
Also, abgesehen von onLoad, den Rest der Ereignisbehandlung innerhalb von onLoad verschieben und sie so nah wie möglich an das Ziel anhängen: http://jsfiddle.net/codepic/8pE6z/2/ Dies jedoch effektiv zerstört die Ereignisbehandlung auf Steuerelementen, die mit AJAX geladen sind. Vielleicht muss ich ein benutzerdefiniertes Ereignis auslösen, wenn ein "Steuerelement" geladen wird. Wie so: http://jsfiddle.net/codepic/8pE6z/3/ Auf diese Art würde es nur einen Ereignishandler auf dem Dokumentelement geben, der nach .control sucht und den Rest der Ereignisbindung näher an das Ziel bindet. –