我有一个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;
}
}
}
答案 0 :(得分:0)
在自己的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);
}
}
}
答案 1 :(得分:0)
看起来你正试图为所有3
项做一个循环。这样做的好处是所需的迭代次数较少,但您没有包含任何代码以确保您不会尝试查找 undefined <option>
。接下来,考虑使用一个循环的优势是如何真正节省迭代次数,因此有两个循环,第二个拾取到第一个结束的地方,仍将具有最小的迭代计数。
因此,如果你想保存循环迭代,你可以尝试这样的事情,其中循环中的项目会根据i
的距离和已经减少的内容而减少已经发现了。但这确实会导致一些代码重复。注意循环按月然后天然后年的顺序排序,因为 12&lt; 31&lt; x (我假设 x 约为400
),因此确保您不会尝试查找,例如 20个月,当然不存在。
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>
中。