Порядок стрельбы на Аурелии - PullRequest
0 голосов
/ 08 октября 2018

Я создаю пользовательский шаблон с возможностью выбора.На элементе ввода есть привязки focus (trigger), blur (trigger), keyup (delegate) и value (bind).Содержимое выпадающего меню отображается в div, внутри того же div, что и этот вход.раскрывающийся список отображается, когда фокус находится на поле ввода, но когда я щелкаю один из элементов в моем настраиваемом раскрывающемся списке, событие размытия срабатывает до срабатывания делегата щелчка, и поэтому я не получаю вызов selectThis() method.

Шаблон выглядит следующим образом:

<template>
<require from="../searchabledropdown/searchabledropdown.css"></require>
<div class="dropdown">
    <input type="text" 
           placeholder="Search.." 
           id="inputSearchField" 
           value.bind="searchValue"
           keyup.delegate="findData()"
           focus.trigger="changeVisibility(true)"
           blur.trigger="changeVisibility(false)">
    <div if.bind="visible" class="dropdown-content">
        <a href="${'#' + option.thingId}" click.delegate="selectThis(option.thingId)" repeat.for="option of thingimabobs">${option.textValue}</a>
    </div>
</div>

Как я могу получить элемент click для первого срабатывания, не взламывая его с помощью тайм-аутов и прочего ...?- Я попытался установить blur.trigger на div, который содержит class="dropdown", но тогда он вообще не сработает ...

1 Ответ

0 голосов
/ 09 октября 2018

для события click для элемента 2 должны произойти вещи.

  1. мышь должна находиться на этом элементе, когда начинается щелчок.
  2. мышькогда этот щелчок заканчивается, он должен быть на этом элементе.

вы можете заметить, что, начав щелчок по элементу, затем отодвинув мышь от элемента во время щелчка - и отпустив мышь за пределами элемента,в этом случае событие click не сработает.

, но если вы нажали на элемент, а затем, удерживая мышь, вышли, но снова вошли, а затем отпустили мышь,тогда сработает событие click.

в вашем случае - второе требование никогда не будет выполнено - потому что к тому времени, как вы отпустите кнопку мыши - событие blur уже сработало и ваш элемент исчезнет - такваш элемент не улавливает отпускание мыши.

TL; DR

просто измените ваше событие с click на mousedown - тогда ваш код будет срабатывать немедленно, когда вы нажимаете наэлемент.

http://codingrepo.com/javascript/2017/05/19/javascript-difference-mousedown-mouseup-click-events/

...