【问题标题】:Boolean variable not keeping current state布尔变量不保持当前状态
【发布时间】:2017-09-23 22:17:35
【问题描述】:

我正在尝试分配一个布尔值以在单击类 .ion-ios-pause 时进行更改。如果它被点击,那么它不应该在之后运行player.skipTo(player.playlist.length-1); 行。但是,invalid 变量始终为 false(除了当我在.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>

【问题讨论】:

    标签: javascript jquery howler.js


    【解决方案1】:

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

    您的 if 语句仅在调用主函数时执行,而不是在单击后执行,并且每当您调用该函数时,它会将值重置为 false,因此您将始终执行 if 语句。

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

    【讨论】:

    • 我想:为什么这个函数里面有点击处理程序?对我来说,这根本没有意义。
    • @DobromirM 嘿嘿,你说得对,在里面添加点击功能没有意义。但是,将其拉出并不能解决此问题。我在屏幕上有一个播放 btn,当它被点击时,它会切换到暂停 btn。我遇到的问题是当我单击暂停按钮暂停歌曲时,歌曲被重置。这是因为仍然以某种方式调用了 skipTo 方法。
    【解决方案2】:

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

    【讨论】:

    • 使用这个方法,歌曲仍然会重置,这意味着skipTo方法仍然被调用
    • @JordanLewallen 你能发布你的playbutton 点击​​监听器吗?
    • 包含onclick="clickSongPlay()" 的html 行?
    猜你喜欢
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多