布尔变量不保持当前状态

Boolean variable not keeping current state

我正在尝试分配一个布尔值以在单击 class .ion-ios-pause 时进行更改。如果它被点击,那么它之后不应该 运行 player.skipTo(player.playlist.length-1); 行。但是,invalid 变量始终为 false(除了 .click() 中的 i console.log 时。我认为既然我在两个语句的范围之外声明了我的变量,那么变量应该改变状态也在 .click() 函数的范围之外,但它没有。我错过了什么?

function clickSongPlay(artist, title, url, imageURL) {
    //debugger;
    player.playlist.push(
        {
            title: title,
            artist: artist,
            file: url,
            imageURL: imageURL,
            howl: null
        }
    );
    ////HERE IS THE CODE SNIPPET/////
    var invalid = false;

    $(".ion-ios-pause").click(function () {
        player.pause();
        invalid = true;
    });

    if (invalid === false) {
        player.skipTo(player.playlist.length - 1);
    }
   //////END RELEVANT CODE SNIPPET///////

}

HTML:

<div><i class="icon ion-ios-play music-control" onclick="clickSongPlay('@song.Artist','@song.Title','@song.URL','@song.Album.ImageURL', this);"></i></div>

我不确定你想要实现什么但是当你的主要功能被调用时 clickSongPlay 它设置变量 invalidfalse 附加 click() 侦听器到 $(".ion-ios-pause") 但它此时不执行它 然后它检查 if 语句。

您的 if 语句仅在调用 main 函数时执行,而不是在单击后执行,无论何时调用该函数,它都会将值重置为 false,因此您将始终以 if 语句正在执行。

最简单的解决方法是获取 var invalid = false; 并将其放在您的函数之外。您可能还想将整个点击侦听器放在函数范围之外。

你的问题是在 click 事件触发后你也应该进行验证检查。您可以执行以下代码:

var invalid = false;
function clickSongPlay(artist, title, url, imageURL) {
//debugger;
player.playlist.push(
    {
        title: title,
        artist: artist,
        file: url,
        imageURL: imageURL,
        howl: null
    }
);

$(".ion-ios-pause").click(function () {
    player.pause();
    invalid = true;
    validationCheck();
    });
    validationCheck();
}
function validationCheck()
{
if (invalid === false)
    {
    player.skipTo(player.playlist.length - 1);
    }
}