布尔变量不保持当前状态

时间:2017-09-23 22:17:36

标签: javascript jquery howler.js

我正在尝试分配一个布尔值,以便在单击类.ion-ios-pause时进行更改。如果单击它,则之后不应运行player.skipTo(player.playlist.length-1);行。但是,invalid变量总是假的(除了我在.click()中的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>

2 个答案:

答案 0 :(得分:1)

我不确定您要实现的目标,但是当您的主要功能被调用def palindrome(word): if ' ' in word: word = word.replace(' ', '') palindrome = reversed(word) for letter, rev_letter in zip(word, palindrome): if letter != rev_letter: return 'Not Palindrome' return 'Palindrome' 时,它会将变量clickSongPlay设置为invalid,将false侦听器附加到{ {1}} 但此时不执行,然后检查click()语句。

您的$(".ion-ios-pause")语句仅在调用main函数时执行,而不是在单击后执行,每当您调用该函数时,它都会将值重置为false,因此您将始终以{{1}结束声明执行。

最简单的解决方法是获取if并将其置于功能之外。您可能还希望将整个单击侦听器放在函数范围之外。

答案 1 :(得分:1)

你的问题是在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);
    }
}