/ / Spustenie udalosti pre všetkých poslucháčov okrem samotného spúšťača - jquery, manipulácia s udalosťami, vzor pozorovateľa

Spustenie udalosti pre všetkých poslucháčov okrem samotného spúšťača - jquery, manipulácia s udalosťami, vzor pozorovateľa

Mám niekoľko odkazov viazaných na vlastnú udalosť. Udalosť sa spúšťa umiestnením kurzora na niektorý z týchto odkazov. Nechcem však, aby sa spustila na linke, ktorú som vlastne vznášal.

Môžem sa zamyslieť nad niekoľkými možnými riešeniami

  1. Ak vo funkcii spätného volania vložil znak "if"udalosť a nejako skontrolujte, či spúšťací objekt je objekt, ktorý sa pokúša spúšťať funkciu spätného volania a zodpovedá t. Je možné objekt porovnávať pohodlne a efektívne?

  2. Dočasne odpojte poslucháča od objektuspúšťanie udalosti a následné znovuzískanie. Nevyznie to nepriestrelné, pretože udalosť môže byť odskočená skôr, ako bola spustená? Nie som si istý, ako sa s týmito typmi frontu udalostí zaobchádza. Bude jquery.trigger skutočne ovplyvniť všetkých poslucháčov pred vykonaním ďalšieho vyhlásenia? Ďalšou nevýhodou je, že by to mohlo byť považované za hack, namiesto dobrého postupu? Máte názor?

  3. Preskočte celú vec udalosti a spúšte a lenzhromažďovať každý objekt v poli a nechať funkciu spätného volania vznášať sa opakovaním toho, čo robím čo chcem. Myslím, že v skutočnosti niečo ako to, čo sa v skutočnosti deje za záclonami v uvedených scenároch

Existuje bežná prax na riešenie tohto problému? Niečo v modeli pozorovateľa možno?

odpovede:

0 pre odpoveď č. 1

Dajte každému odkazu ID a triedu. Keď myš prejde do aktívnej oblasti jedného z vašich špeciálnych odkazov, vypáli svoju vlastnú udalosť na všetkých z nich s ID odkazu, na ktorom sa myš pohybuje. Nechajte svoj vlastný popisovač udalostí skontrolovať, aby sa ubezpečil, že toto ID nezodpovedá ID odkazov, ktoré dostanú oznámenie o udalosti.

<a class="fancy-hover" id="1" href="foo">Example Link 1</a>
<a class="fancy-hover" id="2" href="bar">Example Link 2</a>
<a class="fancy-hover" id="3" href="qux">Example Link 3</a>

<script type="text/javascript">
// custom event
$("a.fancy-hover").bind("mouseOverOneOfUs",function(event, whatMouseHoversOver){

// Prevent item mouse is over from responding.
if (whatMouseHoversOver != this.id) {
// do something
}
return false; // Stop propagation up the DOM tree. Remove to allow propagation.
});

// When mouse enters the active area of a link with class "fancy-hover",
//     tell all links in the class which member of the class has the mouse.
$("a.fancy-hover").mouseenter(function() {

// this.id is ID of current element,
//     and we pass the value as an array to our custom event.
$("a.fancy-hover").trigger("mouseOverOneOfUs", [this.id]);
});
</script>