Событие при нажатии кнопки Javascript Dojo / Dijit с переключателем не сработает, если снова нажать ту же кнопку

Я могу создавать переключатели Dijit с событием по щелчку, и они работают нормально. Однако при повторном щелчке по той же кнопке, то есть по кнопке, которая в данный момент отмечена, событие on-click не срабатывает. Как я могу сделать так, чтобы был обратный вызов события, который я мог бы использовать, когда выбранный в данный момент переключатель снова нажат?

Я использую dijit / form / RadioButton ".

Я создаю радиокнопку программно следующим образом:

var aRadioButton = new RadioButton({
  checked: someBooleanValue,
  value: someValue,
  name: someName,
  onClick: lang.hitch(this, buttonCallback) // This works, except for when same button is clicked.
});

person henrykodev    schedule 25.05.2017    source источник
comment
Вы не можете изменить это поведение, не переопределив _onClick метод, потому что он предназначен для подавления onClick события, когда радио проверено или отключено   -  person barbsan    schedule 26.05.2017


Ответы (1)


Dojo не поддерживает такое поведение для RadioButton по умолчанию.

В качестве альтернативы обезьяньему пути функции _onClick в файле _RadioButtonMixin.js вы можете вместо этого добавить непосредственно прослушиватель событий в самом dom, в этом примере я использую focusNode на RadioButton.

Живой пример:

https://jsfiddle.net/gibbok/kwdy5gqc/

  require([
  "dojo/on",
  "dojo/parser",
  "dijit/form/RadioButton",
  "dijit/form/Button", // used for example purpose
  "dojo/domReady!"
], function(on, parser, RadioButton) {
  var radioOne = new RadioButton({
    checked: true,
    value: "tea",
    name: "drink"
  }, "radioOne");

  var radioTwo = new RadioButton({
    checked: false,
    value: "coffee",
    name: "drink"
  }, "radioTwo");

  var signal = on(radioOne.focusNode, "click", function(event) {
    // this code will fire when domNode is clicked
    alert('click on input tea');
  });

  var signal = on(radioTwo.focusNode, "click", function(event) {
    // this code will fire when domNode is clicked
    alert('click on input cafee');
  });


  parser.parse();
});

<form id="myform">
  <input type="radio" name="drink" id="radioOne" checked value="tea" />
  <label for="radioOne">Tea</label>
  <br />
  <input type="radio" name="drink" id="radioTwo" value="coffee" />
  <label for="radioTwo">Coffee</label>
  <br />

  <button data-dojo-type="dijit/form/Button" type="button">
    Show form submit value
    <script type="dojo/on" data-dojo-event="click">
      require(["dojo/dom"], function(dom){ with(dom.byId('myform'))with(elements[0])with(elements[checked?0:1])alert(name+'='+value); return false; });
    </script>
  </button>
</form>
person GibboK    schedule 26.05.2017
comment
Вы пробовали это альтернативное решение с назначением события domNode? Не вижу разницы - при проверке радио событие остается подавленным. - person barbsan; 26.05.2017
comment
@barbsan спасибо за ваш комментарий, пожалуйста, посмотрите мое редактирование :) - person GibboK; 26.05.2017
comment
Хорошо, теперь это работает. Вместо длинного radioOne.domNode.childNodes[0] можно также использовать radioOne.focusNode :) - person barbsan; 26.05.2017