Events 为「;更改“;事件;选择";在ToolTipDialog中执行时间

Events 为「;更改“;事件;选择";在ToolTipDialog中执行时间,events,select,dojo,Events,Select,Dojo,为什么选择“更改”事件执行时间将随着按钮的单击次数增加 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

为什么选择“更改”事件执行时间将随着按钮的单击次数增加

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(); 


});
require([“dojo/\u base/declare”、“dojo/dom”、“dojo/on”、“dojo/\u base/lang”、“dijit/registry”、“dijit/TooltipDialog”、“dijit/popup”、“dijit/form/Select”、“dojo/\u base/array”、“dojo/domReady!”),
函数(声明、dom、on、lang、注册表、工具提示对话框、弹出窗口、选择、数组){
var InfoWindow=declare(//类名省略
工具提示对话框,
{
构造函数:函数(参数){
console.log(“你好”);
},
测试:函数(){
var tNode=dom.byId(“btn”);
var myTooltipDialog=新建TooltipDialog({
id:“myTooltipDialog”,
样式:“宽度:300px;”,
内容:“1234”,
onMouseLeave:函数(e){
if(registry.getEnclosuringWidget(e.target).name==“select1”)
返回;
弹出.关闭(myTooltipDialog);
},
onOpen:lang.hitch(这个函数是e){
})
});
var sHu=registry.byId(“sel006”);
关于(“改变”,职能(e){
警报(“值为”+sHu.value);
});
打开(tNode,“单击”,函数(){
打开({
弹出:myTooltipDialog,
around:dom.byId('btn')
});
})
这是m1=“t1”;
}
}
);
var infoWindow=新infoWindow({
});
infoWindow.test();
});
代码位于以下链接:


工具提示对话框显示可能有问题,但不会影响要复制的问题。

复制单击是正常的,因为:

在按钮中,单击(上方):

在每次单击按钮时,您都会打开弹出窗口,因此,工具提示的打开功能正在执行(
onOpen
事件已触发),这意味着更改事件将再次附加到您的
sel006
选择
输入

我建议您不要在工具提示
onOpen
事件中指定select change事件,而只是在工具提示初始化后声明它

因此,代码变成:

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);
});
var myTooltipDialog=新建TooltipDialog({
id:“myTooltipDialog”,
样式:“宽度:300px;”,
内容:“1234”,
onMouseLeave:函数(e){
if(registry.getEnclosuringWidget(e.target).name==“select1”)
返回;
弹出.关闭(myTooltipDialog);
},
onOpen:lang.hitch(这个函数是e){
//从此处删除事件
})
});
var sHu=registry.byId(“sel006”);
关于(“改变”,职能(e){
警报(“值为”+sHu.value);
});

下面是一个小提琴示例:

这是正常的,因为:

在按钮中,单击(上方):

在每次单击按钮时,您都会打开弹出窗口,因此,工具提示的打开功能正在执行(
onOpen
事件已触发),这意味着更改事件将再次附加到您的
sel006
选择
输入

我建议您不要在工具提示
onOpen
事件中指定select change事件,而只是在工具提示初始化后声明它

因此,代码变成:

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);
});
var myTooltipDialog=新建TooltipDialog({
id:“myTooltipDialog”,
样式:“宽度:300px;”,
内容:“1234”,
onMouseLeave:函数(e){
if(registry.getEnclosuringWidget(e.target).name==“select1”)
返回;
弹出.关闭(myTooltipDialog);
},
onOpen:lang.hitch(这个函数是e){
//从此处删除事件
})
});
var sHu=registry.byId(“sel006”);
关于(“改变”,职能(e){
警报(“值为”+sHu.value);
});
以小提琴为例: