"select" 的 "change" 事件在 ToolTipDialog 执行时间内的问题

Issue for the "change" event of "select" in ToolTipDialog execution times

为什么Select 更改 事件执行次数会随着按钮点击次数的增加而增加。

HTML :

<button id="btn">click me</button>

JS

require(["dojo/_base/declare", "dojo/dom", "dojo/on", "dojo/_base/lang", "dijit/registry", "dijit/TooltipDialog", "dijit/popup","dijit/form/Select", "dojo/_base/array", "dojo/domReady!"],
  function(declare, dom, on, lang, registry, TooltipDialog, popup,Select, Array) {
  var InfoWindow= declare( // 类名省略
    TooltipDialog,
    {
      constructor: function (parameters) {
        console.log("hello");

      },

      test:function(){
        var tNode=dom.byId("btn");
        var myTooltipDialog = new TooltipDialog({
          id: 'myTooltipDialog',
          style: "width: 300px;",
          content: '<div id="tpDialog006" class="pDlg"></div><div id="selectMenu" class="right"><select name="select1" id="sel006"  data-dojo-type="dijit/form/Select"> <option  value="037" selected="selected">1</option><option class="left" value="005" >2</option><option class="left" value="007" >3</option><option   value="006">4</option></select></div>',
          onMouseLeave: function(e){
            if(registry.getEnclosingWidget(e.target).name=="select1")
              return;
            popup.close(myTooltipDialog);
          },
          onOpen:lang.hitch(this, function(e) {

          })
        });

        var sHu = registry.byId("sel006" );
        sHu.on("change", function (e) {
          alert( "value is" +sHu.value);
        });

        on(tNode,"click",function(){
          popup.open({
            popup: myTooltipDialog,
            around: dom.byId('btn')
          });
        })
        this.m1="t1";

      }

    }
  );

  var infoWindow = new InfoWindow({
  });
  infoWindow.test(); 


});

密码在link:code link

tooltipdialog显示可能有问题,但不影响问题重现。

重现点击是正常的,因为:

在按钮中点击(上图):

on(tNode,"click",function(){
   popup.open({
      popup: myTooltipDialog,
      around: dom.byId('btn')
   });
})

每次单击按钮都会打开 Popup,因此工具提示的 open 功能会被执行(onOpen 事件已触发),这意味着更改事件会再次附加到你的 sel006 select 输入 .

我建议你不要在工具提示 onOpen 事件中分配 select 更改事件,只需在工具提示初始化后声明它

所以代码变成了:

var myTooltipDialog = new TooltipDialog({
                    id: 'myTooltipDialog',
                    style: "width: 300px;",
                    content: '<div id="tpDialog006" class="pDlg"></div><div id="selectMenu" class="right"><select name="select1" id="sel006"  data-dojo-type="dijit/form/Select"> <option  value="037" selected="selected">1</option><option class="left" value="005" >2</option><option class="left" value="007" >3</option><option   value="006">4</option></select></div>',
    onMouseLeave: function(e){
        if(registry.getEnclosingWidget(e.target).name=="select1")
        return;
        popup.close(myTooltipDialog);
    },
    onOpen:lang.hitch(this, function(e) {
        // remove event from here                 
    })
});

var sHu = registry.byId("sel006" );

sHu.on("change", function (e) {
    alert( "value is" +sHu.value);
});

下面是一个 fiddle 示例:Fiddle