首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环中的javascript连续条件

循环中的javascript连续条件
EN

Stack Overflow用户
提问于 2013-08-15 18:12:02
回答 2查看 87关注 0票数 0

我有一个javascript函数。第三个条件不起作用,当它单独在循环中而不是其他条件时,它就起作用了,我不知道为什么。谁都能帮上忙??

代码语言:javascript
复制
function verif(ref1, ref2, ref3, ref4, ref5, ref6) {
    document.forms["form"].intitule.value = ref1;
    document.forms["form"].montant.value = ref2;
    document.getElementById(ref3).selected = true;

    for (var i = 1; i <= 400; i++) {
        if (document.getElementById("newDay").options[i].text == ref4) {
            document.getElementById("newDay").options[i].selected = true;
        }
        if (document.getElementById("newMonth").options[i].text == ref5) {
            document.getElementById("newMonth").options[i].selected = true;
        }
        if (document.getElementById("newYear").options[i].text == ref6) {
            document.getElementById("newYear").options[i].selected = true;
        }
    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-08-15 18:25:29

将每个条件添加到它自己的try catch中,并查看是否有任何条件抛出错误。我已经添加了警报来帮助您进行调试。

代码语言:javascript
复制
function verif(ref1, ref2, ref3, ref4, ref5, ref6) {
    document.forms["form"].intitule.value = ref1;
    document.forms["form"].montant.value = ref2;
    document.getElementById(ref3).selected = true;

    for (var i = 1; i <= 400; i++) {
        try{
        if (document.getElementById("newDay").options[i].text == ref4) {
            document.getElementById("newDay").options[i].selected = true;
        }
        }catch(err){
          alert(err);
        }
        try{
        if (document.getElementById("newMonth").options[i].text == ref5) {
            document.getElementById("newMonth").options[i].selected = true;
        }
        }catch(err){
          alert(err);
        }
        try
        {
        if (document.getElementById("newYear").options[i].text == ref6) {
            document.getElementById("newYear").options[i].selected = true;
        }
        }catch(err){
          alert(err);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2013-08-15 20:16:36

看起来您正在尝试为所有3项执行一次循环。这样做的好处是所需的迭代次数较少,但是您没有包含任何代码来确保您不会尝试查找未定义的<option>。接下来,考虑使用一个循环的优势是如何真正节省迭代次数的,因此有两个循环,第二个循环从第一个循环结束的地方开始,仍然具有最小的迭代次数。

因此,如果您想在循环中保存iterations,您可以尝试类似这样的操作,其中循环中的项根据i的进展和已经找到的内容而减少。不过,这确实会导致一些代码重复。注意循环是如何按月、天和年的顺序排序的,因为12 < 31 400的),因此确保您不会尝试查找,例如第20个月,当然不会存在。

代码语言:javascript
复制
function verif(ref1, ref2, ref3, ref4, ref5, ref6) {
    document.forms["form"].intitule.value = ref1;
    document.forms["form"].montant.value = ref2;
    document.getElementById(ref3).selected = true;

    var i = 0, found = {day: 0, month: 0, year: 0},
        elm = {
            days: document.getElementById("newDay"),
            months: document.getElementById("newMonth"),
            years: document.getElementById("newYear")
        };
    // months length = min(days, months, years)
    while (++i < elm.months.length && !found.months) {
        if (elm.days.options[i].text == ref4) {
            found.days = elm.days.options[i].selected = true;
        }
        if (elm.months.options[i].text == ref5) {
            found.months = elm.months.options[i].selected = true;
        }
        if (elm.years.options[i].text == ref6) {
            found.years = elm.years.options[i].selected = true;
        }
    }
    // days length = min(days, years)
    while (++i < elm.days.length && !found.days) {
        if (elm.days.options[i].text == ref4) {
            found.days = elm.days.options[i].selected = true;
        }
        if (elm.years.options[i].text == ref6) {
            found.years = elm.years.options[i].selected = true;
        }
    }
    // only years left
    while (++i < elm.years.length && !found.years) {
        if (elm.years.options[i].text == ref6) {
            found.years = elm.years.options[i].selected = true;
        }
    }
}

您可能还注意到,我没有包含任何break语句,这是因为如果我们找到了在后面的循环中仍将查找的内容,我们仍然希望搜索特定于当前循环的项,我们不想跳过相同迭代的其他检查,我们也不想在后面的循环上浪费时间。因此,在<condition>中有一段代码执行类似于break的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18250569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档