【问题标题】:Get Booleans Out of An Array in JavaScript在 JavaScript 中从数组中获取布尔值
【发布时间】:2015-11-08 08:49:49
【问题描述】:

我正在尝试从数组中获取值。如果数组中的值等于 false,它会将页面重定向到新窗口。但是,dialogBehavior() 函数将不起作用。有谁知道问题是什么?语法有错误吗?

var byLawsToken = false;
var meetingSummaryToken = false;
var directoryToken = false;

var tokenArray = new Array(3);
tokenArray[0] = byLawsToken;
tokenArray[1] = meetingSummaryToken;
tokenArray[2] = directoryToken;


var windowLocation = new Array(3);
windowLocation[0] = "bylaws.html";
windowLocation[1] = "index.html";
windowLocation[2] = "about.html";

function dialogBehavior()
{
    var hashedPassword = "6909b1c8fa84hd98b1f25aa1a4bccc23";
    var hashedInput = CryptoJS.MD5($("#passwordTXT").val()).toString();

    if(hashedInput == hashedPassword)
    {

       // The part I'm having trouble with 
       for(var i = 0; i < tokenArray.length; i++)
       {
           if(tokenArray[i].get() == true)
           {
               window.location.href = windowLocation[i];
               break;
           }
       }
    }

    else
    {
        $("#error").show();
        $("#passwordTXT").val("")
    }

}

function throwByLawsToken()
{
    byLawsToken = true;

}

function throwMeetingSummaryToken()
{
    meetingSummaryToken = true;

}

function throwDirectoryToken()
{
    directoryToken = true;
}

function resetTokens()
{
    var byLawsToken = false;
    var meetingSummaryToken = false;
    var directoryToken = false;
}


function hideDialog()
{
    $("#error").hide();
    $("#passwordTXT").val("")

}

function writeDate()
{
    document.write(new Date().getFullYear());
}

【问题讨论】:

  • "dialogBehavior() 函数将不起作用" 请详细说明。它实际上是做什么的?你做了什么来尝试修复它?
  • 在 JavaScript 中进行比较时始终使用三等号 ===
  • 您还说“如果数组中的值等于 false,它会将页面重定向到新窗口”,但您的代码却相反。 if(tokenArray[i].get() == true) { window.location.href = windowLocation[i]; }
  • @navasd 这完全是错误的。如果您应该只使用 === 运算符,那么其他运算符为什么会存在呢?
  • 函数 dialogBehavior( ) 将根据用户点击的链接将用户重定向到新网页。但是,该功能不会将人重定向到新页面。循环中的if语句不会执行。

标签: javascript arrays loops boolean


【解决方案1】:

您似乎正在尝试将对令牌的引用放入令牌数组中,但您的代码只是用令牌的初始值填充数组。

var someVariable = false;
tokenArray[0] = someVariable; // tokenArray[0] === false
someVariable = true; // tokenArray[0] still === false

令牌变量和令牌数组之间没有长期关联。

你可以这样做:

var byLawsToken = {val: false};
var meetingSummaryToken = {val: false};
var directoryToken = {val: false};

然后

if(tokenArray[i].val) // no need to do an equality check with true

然后更改 throws 函数以修改 tokenVariable.val 而不是 tokenVariable。

您在 resetTokens 中也遇到了问题,您尝试重置全局令牌变量,但您使用 var 声明局部变量。您可以直接设置它们,没有 var;否则全局变量将保持不变。

此外,如果您能从大局向我们提供有关您想要完成的任务的更多详细信息,可能还有更优雅的方式来完成您想做的事情。

【讨论】:

【解决方案2】:

我认为问题出在这里:

if(tokenArray[i].get() == true)

.get() 函数不是来自 JavaScript 核心函数..所以可能是你的问题的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2017-09-23
    • 1970-01-01
    • 2013-07-19
    相关资源
    最近更新 更多