仅在另一个函数中运行一次“非”单击功能

时间:2015-03-25 17:33:04

标签: javascript jquery

如何只运行一次功能?我读到了关于jquery .one但它似乎只适用于点击功能。我需要我的音频播放功能才能激活一次,否则当用户再次点击同一链接时我有两个音频播放器。

我该怎么做?这是我需要运行一次的代码:

        $(function() {
            $('audio').audioPlayer();
        });

这里是完整的代码:

$('ul li:nth-child(2)').click(function(e) {;
    e.preventDefault();
    link1.reverse()
    link2.reverse()
    link3.reverse()

    $('#div').uncomment( /* recurse */ true);
    setTimeout(function() {
        link4.play()
        $(function() {
            $('audio').audioPlayer();
        });
        picturefill({
            reevaluate: true
        });
    },

3 个答案:

答案 0 :(得分:-1)

您可以简单地使用变量来跟踪它是否已被执行。并且你不需要setTimeout函数中的$(function(){...},因为这个绑定已经在DOM准备好之后创建了。

E.g。

HTML:

<ul>
    <li>test</li>
    <li>click me</li>
    <li>test</li>
</ul>

JS:

var hasPlayed = false;

$(function () {

    $('ul li:nth-child(2)').click(function (e) {;
        e.preventDefault();
        link1.reverse();
        link2.reverse();
        link3.reverse();

        $('#div').uncomment( /* recurse */ true);
        if (!hasPlayed) {
            hasPlayed = true;
            setTimeout(function () {
                link4.play();
                $('audio').audioPlayer();
                picturefill({
                    reevaluate: true
                });
            }, 1000);
        }
    });
});

小提琴:http://jsfiddle.net/BenjaminRay/2eaf28jh/

答案 1 :(得分:-2)

尝试使用数据属性,

var playAudio = function() {
       if ($('.audio').data('once') != true) {
          $('.audio').append('Once'); // replace with $('audio').audioPlayer();
          $('.audio').data('once', true)
       }
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div class="audio"></div>

<a href="" onClick="playAudio(); return false;">Click Me</a>

答案 2 :(得分:-3)

您可以使用保护条件。我对这个audioPlayer()并不熟悉,但是如果有办法提出问题&#34;它是否正在播放&#34;你可以做到

if (!audioPlayer.isPlaying()) {
  $('audio').audioPlayer();
}

否则你可以做类似

的事情
//Outside the click handler
var isFirstRun = true;
...

//Inside the click handler
if (isFirstRun) {
  isFirstRun = false;
  $('audio').audioPlayer();
}