函数运行所有条件,忽略当前变量

时间:2013-01-05 23:11:57

标签: javascript

我创造了一些div;他们的innerHTML属性根据显示的当前图像(由imageArray[value]定义)进行更改。我遇到的问题是这个函数中的条件不能正常工作。此函数运行每个语句,并停在最后一个条件括号中的值。这可能是一个逻辑问题或缺少一段代码,但我想对如何解决这个问题有所了解。

此功能通过prevImage()nextImage()

触发
function textChange(){

var titleMod = document.getElementById('title');
var dateMod = document.getElementById('date');
var infoMod = document.getElementById('info');
var pagelink = document.getElementById('enter');

if(new_image = imageArray[0]){

    titleMod.innerHTML = "This is Image 1";
    dateMod.innerHTML = "july 12 12";
    infoMod.innerHTML = "<p>paragraph goes in here</p>";
    pagelink.onclick = "window.location.href='house.html';"

    alert('\o/');

    }

if(new_image = imageArray[1]){

    titleMod.innerHTML = "This is Image 2";
    dateMod.innerHTML = "july 12 19";
    infoMod.innerHTML = "<p>paragraph</p>";
    pagelink.onclick = "window.location.href='contact.html';"

    alert('lolol');

    }

if(new_image = imageArray[2]){

    titleMod.innerHTML = "This is Image 3";
    dateMod.innerHTML = "july 12 19";
    infoMod.innerHTML = "<p>paragraph</p>";
    pagelink.onclick = "window.location.href='contact.html';"

    alert('thisWorks');

    }

}

3 个答案:

答案 0 :(得分:1)

您在测试中使用的是做法运算符“=”而不是“==”。

  

(new_image = imageArray [1])

始终返回true

  

(new_image == imageArray [1])

测试是否相等(“===”将测试严格的相等性)

答案 1 :(得分:1)

所有条件都使用赋值而不是比较。

new_image = imageArray[2]new_image设置为imageArray[2]的值,这是一个真值。你需要比较两件事,例如。

new_image === imageArray[2]

至于为什么它们都在运行,而不是在第一个条件满足后立即短路,这是因为你使用的是一系列独立的if语句,而不是{ {1}},ifelse if

else

答案 2 :(得分:0)

您的条件将始终返回true。这是因为您将new_image设置为imageArray[#]的值。

if(new_image = imageArray[0]){

请注意,在上面一行中,您使用单个等号而不是测试相等性的双等号。单个等号是赋值运算符。

相反,该行应写为:

if(new_image == imageArray[0]){

您还可以使用===对这两个值进行严格比较。如果您想比较两个值的types,这非常有用。

那么为什么作业总是如此?从技术上讲,它并不总是如此。等号右侧的值是JavaScript测试的值。 JavaScript会将此值转换为布尔值,而转换为布尔值时,相当多的值将成为布尔值TRUE。在您的特定情况下,您正在测试字符串。转换为长度大于0的String时,任何Boolean都会计算为TRUE,因此您的代码无法正常运行。