循环中的javascript连续条件
javascript successive conditions in a loop
我有一个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;
}
}
}
将每个条件添加到自己的try-catch中,看看是否有任何条件抛出错误。我添加了警报来帮助您调试。
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);
}
}
}
看起来您正试图为所有3
项执行一个循环。这样做的好处是所需迭代次数较低,但您没有包含任何代码,以确保您不会试图查找未定义的<option>
s。接下来,考虑使用一个循环的好处是如何真正节省迭代次数,因此有两个循环,第二个循环从第一个循环结束的地方开始,仍然具有最小的迭代次数。
因此,如果您想保存循环迭代,您可以尝试这样的方法,其中循环中的项目会根据i
的距离和已经找到的内容而减少。不过,这确实会导致一些代码重复。注意循环是如何按月、天和年的顺序排序的,因为12<31<x(我假设x20个月,当然这是不存在的。
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
语句,这是因为如果我们在以后的循环中找到了仍将要查找的内容,我们仍然希望搜索特定于当前循环的项,我们不希望跳过同一迭代的其他检查,也不想在以后的环路上浪费时间。因此,一段与break
执行类似操作的代码位于<condition>
中。
相关文章:
- 通过js在新选项卡中有条件地打开url
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- jQuery-有条件地附加HTML
- 根据某些条件在视图之间切换
- 如何做到这一点,使代码在不传递条件后执行函数
- 有条件更新d3.js力图中节点的最佳方法
- javascript中的布尔条件
- Woocommerce产品选项有条件
- 基于两个条件退出While循环
- 有条件地在选项标记中应用布尔属性
- 使用javascript以HTML形式验证条件
- 聚合物0.5.5:核心列表中的条件模板和/或模板动态参考
- javascript对象操作:根据指定条件选择属性
- 这个条件语句的逻辑有问题
- ADF:有条件地加载javascript资源
- Javascript,如果条件在没有&&逻辑运算符当&&它不起作用
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 连续调用 javascript 函数,直到条件
- 循环中的javascript连续条件
- Angular ng-show不会连续检查条件