Dojo: dijit.form.select не запускает событие «onClick» при первом нажатии - PullRequest
1 голос
/ 21 января 2010

Я прошел через документы Dojo, а также API и попробовал Google, но не могу найти решение моей проблемы, я надеюсь, что кто-нибудь здесь сможет мне помочь.

Я пытаюсь создать программный dijit.form.select (используя Dojo 1.4) и подключиться к событию onClick виджета. Вот часть моего кода:

var dataSelect = new dijit.form.Select({
        id    : "myselect",
        name  : "myselect",
        labelAttr: "label",
        labelType: "html"
      },
      "selectid");
      dataSelect.addOption({value: "value", label: "first item label"});

      dojo.connect(dataSelect, "onClick", function() {
        alert("clicked!");
      });

Что он делает: создается поле выбора, заменяя поле ввода идентификатором «selectid», создается опция «метка первого элемента». Все в порядке, пока здесь. Затем я подключаюсь к «onClick» -эвенту выбора, который должен загружать больше опций через AJAX (но в этом примере просто отобразит предупреждение для целей тестирования).

Проблема: когда я нажимаю на маленькую стрелку рядом с выпадающим списком, событие запускается (ОК). Но когда я нажимаю на само поле выбора (область, содержащая опцию), событие НЕ запускается при первом щелчке по нему (если только я не нажал на стрелку раньше). Когда я нажимаю кнопку выбора во второй раз (и каждый раз после этого), событие срабатывает!

Я попытался использовать «onFocus» вместо «onClick», который работает, но затем при первом нажатии раскрывающийся список не открывается, даже если я использую функцию «openDropDown» (которая работает при подключении к » OnClick "!).

Это я, я столкнулся с ошибкой Dojo или это странная особенность, которую я просто не понимаю? Любая помощь приветствуется.

Привет, Select0r

Ответы [ 4 ]

2 голосов
/ 19 января 2011

Вот кросс-браузерное решение:

var sizeSelect = new dijit.form.Select({
    id: "sizeSelect",
    name: "state",

    options: size,
    onChange: function(val) {
          dojo.style(dojo.byId("textInput"), {"fontSize":val});
    }
}, "sizeSelect");
1 голос
/ 22 января 2010

Попробуйте подключиться не к самому виджету, а к его узлу dom:

dojo.connect(dataSelect.domNode, "onclick", function() {
        alert("clicked!");
      });
0 голосов
/ 22 марта 2011

Основной причиной этой проблемы является то, что метод _onDropDownMouseDown в dijit._HasDropDown будет манипулировать узлом dom, что вызывает изменения e.target onmousedown и onmouseup для первой инициализации.

Как мы знаем, событие onclick будет срабатывать только тогда, когда цели onmousedown и onmouseup совпадают.

Таким образом, в этом случае событие onclick не вызывается.

Кажется, что в Dojo 1.5 проблема все еще остается.

0 голосов
/ 27 января 2010

Выбор (который расширяет _HasDropDown) имеет причудливый код для обработки:

  1. мыши на виджет выбора
  2. мышь переместится к одному из вариантов
  3. мышь вверх

Может быть, это отменяет событие click.

Может быть, вместо этого вы можете подключиться к _loadChildren ().

...