0

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

prevImage()此功能通过or触发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');

    }

}
4

3 回答 3

1

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

(new_image = imageArray[1])

总是返回真

(new_image == imageArray[1])

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

于 2013-01-05T23:15:15.460 回答
1

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

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

new_image === imageArray[2]

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

if(new_image === imageArray[0]){
  ...
} else if(new_image === imageArray[1]){
  ...
} else if(new_image === imageArray[2]){
  ...
} else {
  // new_image doesn't meet any of the previous conditions
}
于 2013-01-05T23:16:39.597 回答
0

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

if(new_image = imageArray[0]){

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

相反,该行应写为:

if(new_image == imageArray[0]){

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

那么为什么赋值总是等于真呢?从技术上讲,它并不总是如此。等号右侧的值是 JavaScript 正在测试的值。JavaScript 会将此值转换为 boolean 值,而恰好很多值在转换为 boolean 时变为 boolean TRUE。在您的特定情况下,您正在测试字符串。任何String转换为Boolean​​长度大于 0 的 a 都将评估为TRUE,因此为什么您的代码无法按您希望的那样运行。

于 2013-01-05T23:17:49.000 回答