Ja, das können Sie. Nehmen wir an, ich habe eine Tag-Cloud, und wenn ich auf ein Tag klicke, wird das Tag standardmäßig entfernt. Etwas wie:
<div class="tags">
<div class="tag">Tag 1</div>
<div class="tag">Tag 2</div>
</div>
<script>
$(document).ready(function(){
$('.tag').click(function(e){
e.preventDefault();
$(this).fadeOut('slow',function(){
$(this).remove();
});
return false;
});
});
</script>
Nehmen wir nun an, dass dies in einer mitgelieferten Bibliothek für ein Projekt gebündelt ist, aber Sie möchten eine entwicklerfreundliche Möglichkeit bieten, diese Klick-Ereignisse abzufangen und dem Benutzer einen AYS-Dialog (Are You Sure?) anzuzeigen. In Ihrem Kopf denken Sie vielleicht so etwas wie:
<script>
$(document).ready(function(){
$('.tag').beforeRemove(function(){
if (AYS() === false) {
return false; // don't allow the removal
}
return true; // allow the removal
});
});
</script>
Die Lösung wäre also folgende:
<div class="tags">
<div class="tag">Tag 1</div>
<div class="tag">Tag 2</div>
</div>
<script><!-- included library script -->
$(document).ready(function(){
$.fn.beforeRemove = $.fn.click;
$('BODY').on('click','.tag',function(e){
e.preventDefault();
console.log('debug: called standard click event');
$(this).fadeOut('slow',function(){
$(this).remove();
});
return false;
});
});
</script>
<script><!-- included in your page, after the library is loaded -->
$(document).ready(function(){
$('.tag').beforeRemove(function(){
var sWhich = $(this).text();
console.log('debug: before remove - ' + sWhich);
return false; // simulate AYS response was no
// change return false to true to simulate AYS response was yes
});
});
</script>
In diesem Beispiel besteht der Trick darin, dass wir jQuery mit einer beforeRemove
Trigger, der ein Duplikat des click
Auslöser. Als Nächstes wird die Bibliothek durch die Verwendung der $('BODY').on('click','.tag',function(e){...});
Handler, haben wir ihn verzögert und rufen nach unserer Seite beforeRemove
abgefeuert. Daher könnten wir Folgendes zurückgeben false
en beforeRemove
wenn wir eine negative AYS-Bedingung haben und daher nicht zulassen, dass die click
Ereignis fortzusetzen.
Führen Sie also die obige Funktion aus, und Sie werden sehen, dass Klicks auf die Tags das Element nicht entfernen. Schalten Sie nun die beforeRemove
Funktion zur Rückgabe true
(wie bei einer positiven Antwort auf eine AYS-Aufforderung), und die click
Ereignis darf fortgesetzt werden. Sie haben einen Ereignishandler an ein bereits bestehendes Ereignis angehängt click
Veranstaltung.