0

第二种方法,我硬编码输入 id 并将它们连接到 onclick 事件可以正常工作。

但是,当我使用第一种方法时,它不起作用。代码以这种方式执行。

      select1.on('change',function(evt) {
           requiredFunction(select8.id);//select9 is not present (so I changed loop end                                    value from inputs.length -1 to inputs.length -2 )
      }

我是否遗漏了 dojo 中的一些事件处理原则?

方法1:

        function assignOnClickEvents(table) {
            var inputs = document.getElementById(table).getElementsByClassName('classname');
            for (var i = 0; i < (inputs.length - 1); i++) {                    
                dijit.byId(inputs[i].id).on('change', function (evt) {
                    requiredFunction(inputs[i+1].id);
                });
            }
        }

方法2:

        function assignOnClickEvents() {                

            var select1 = dijit.byId('select1');
            var select2 = dijit.byId('select2');
            var select3 = dijit.byId('select3');
            var select4 = dijit.byId('select4');
            var select5 = dijit.byId('select5');
            var select6 = dijit.byId('select6');
            var select7 = dijit.byId('select7');                
            var select8 = dijit.byId('select8');
            var select9 = dijit.byId('select9');
            select1.on('change', function (evt) {
                requiredFunction('select2');
            });
            select2.on('change', function (evt) {
                requiredFunction('select3');
            });
            select3.on('change', function (evt) {
                requiredFunction('select4');
            });
            select4.on('change', function (evt) {
                requiredFunction('select5');
            });                
            select5.on('change', function (evt) {
                requiredFunction('select6');
            });
            select6.on('change', function (evt) {
                requiredFunction('select7');
            });
            select7.on('change', function (evt) {
                requiredFunction('select8');
            });
            select8.on('change', function (evt) {
                requiredFunction('select9');
            });
        }
4

2 回答 2

0

You're mixing DOM node IDs and Dijit IDs. This could be a possible reason why your code isn't working. To fix this, you could try the following approach:

var inputs = dijit.findWidgets(table); // Returns widgets, not DOM nodes
for(var i = 0;i < inputs.length - 1;i++) {
    inputs[i].on('change', function(evt) {
        // Remind: this returns the widget ID, not the DOM ID
        requiredFunction(inputs[i+1].id);
    });
}

In dojo there is a difference between widgets and DOM nodes. So using DOM functions (to retrieve a DOM node by ID or by classname) will not always work. They could work, but that's not always the fact.

于 2013-08-14T06:32:53.377 回答
0

您还可以requiredFunction()按如下方式调用您的函数:

<input data-dojo-attach-event="onChange:requiredFunction"></input>

这将减少您的循环时间并按照您的需要进行类似的工作。

一切顺利。

于 2013-08-21T08:34:42.590 回答