2017-09-23 18 views
-1

我想分配一个布尔值来改变当类.ion-ios-pause被点击。如果点击它,那么它不应该在之后运行player.skipTo(player.playlist.length-1);行。然而,invalid变量总是为false(除了当我console.log在.click()内时,我认为既然我声明了我的变量超出了两个语句的范围,那么变量应该改变.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> 

回答

1

我不知道你想什么来实现,但是当你的主函数被调用clickSongPlay它设置变量invalidfalseclick()听众附加到$(".ion-ios-pause"),但它现在不在处执行,然后它检查if语句。

您的if语句仅在主函数被调用时执行,而不是在点击后执行,每当您调用该函数时,都会将该值重置为false,因此您将始终以if语句执行结束。

最简单的修复方法是获取var invalid = false;并将它放在函数之外。您可能还想将整个点击侦听器放在函数作用域之外。

+1

我想:为什么在这个函数内的点击处理程序?对我来说这没有任何意义。 –

+0

@DobromirM嘿,你是对的,在里面添加点击功能是没有意义的。但是,拔出它不能解决这个问题。我在屏幕上玩了一个btn,当它被点击时,它会切换到暂停btn。我遇到的问题是当我点击暂停btn暂停歌曲时,歌曲被重置。这是因为skipTo方法仍然以某种方式被调用。 –

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); 
    } 
} 
+0

使用这种方法,歌曲仍然重置,这意味着skipTo方法仍然被称为 –

+0

@JordanLewallen你可以发布你的'play'button点击监听器吗? – pooyan

+0

包含'onclick =“clickSongPlay()”'的html行? –