2016-03-28 230 views
0

我有一个页面可以创建与关联事件相对应的下拉对象。在for循环中触发onchange事件只运行一次

当用户运行时,onchange事件适用于所有对象。 我的问题是当我以编程方式调用“onchange”。它只运行一次。这就是我正在做的是:

for (i = 0; i < me.datasource.DocLines.length; i++) { 
    data = me.datasource.DocLines[i]; 
    x = $('#subproduct_' + data.Code); 
    x.val(data.Value); 
    x.change(); 
} 

我这样做编程,因为我是从一个数据库绑定的下拉值,我需要重新计算,以显示计算的值给用户。

该循环仅运行一次。在触发onchange事件之后,代码执行会退出循环,我不知道为什么。 我已经检查了me.datasource.DocLines.length,它总是> 1,这意味着该循环应至少运行两次。

任何线索为什么发生这种情况?

编辑 更多信息:

我这是怎么相关的功能的下拉控制

 for (i = 0; i < dbdata.length; i++) { 
      if ((dbdata[i].Provider) == "False") { //create dropdownboxes events 
       if ((dbdata[i].Dimension) != "True") { 

        $('#subproduct_' + dbdata[i].Code).change({ 
         me: me 
        }, doSomething); 
       } 
      } 
    } 
    //.... 

这种“DoSomething的”只运行一次。我可以通过设置一个断点来检查它。

+1

控制台没有错误?你怎么确定这是'break()'打破循环? – DontVoteMeDown

+0

控制台上没有错误。我在for循环的第一行(data = me.datasource.DocLines [i];)设置了一个断点,并且代码不停止在那里。另外,我可以通过我想要计算的值来检查它只运行一次(这是一个累加器)。另外,我在“onchange”事件中的函数中设置了一个断点,它只会在那里停留一次。 – RSilva

+1

这些是重要的信息。你是否试图在循环之后立即执行所有更改事件? – DontVoteMeDown

回答

0

通过改变“我”迭代器到一个新的变量,我的问题解决了。 “doSomething”函数中还有一个“i”变量。

+1

或许宣告'i'在循环范围 - 避免全球范围 - 将实现,例如:'为(VAR I = 0 ...' – DontVoteMeDown