【问题标题】:How to ReRun a Function?如何重新运行函数?
【发布时间】:2015-06-03 20:36:10
【问题描述】:

如何使此函数可调用?现在,它只在页面重新加载后重新运行。我希望它一直工作。显然,我没有使用unbind 对。

 <script>
        $(document).ready(function() {

            $('.viewAll').bind("click.myEvent", function(){
                $('.mobileNavBtn, #shopNavTabBtn, #sec0').click();
                $(this).unbind("click.myEvent");
                $('html, body').animate({
                    scrollTop: $("#sec0").offset().top
                }, 2000);
                return false;
            });
        })
    </script>

这是我原来的功能:

  <script>
        $(document).ready(function() {

            $('.viewAll').on('click', function(){
                $('.mobileNavBtn, #shopNavTabBtn, #sec0').click();
                $('html, body').animate({
                    scrollTop: $("#sec0").offset().top
                }, 2000);
                return false;
            });
        })
    </script>

【问题讨论】:

  • 首先,不要使用bind,而是使用.on()。其次,为什么不删除unbind。这应该使它可以调用。
  • 我原来的函数确实有.on()。我的函数是可调用的,但我需要它是可重复的。 {当有人再次点击时,我希望该功能重新运行}
  • 您正在为点击事件绑定特定功能。只有当点击发生时才会执行。说了这么多,你想在页面加载和点击事件上执行这个?
  • 我有点困惑,因为您的原始功能似乎确实允许用户单击 .viewAll 元素以根据需要多次滚动到 #sec0 元素(顺便说一句,您只需要 $ ('body') 似乎,而不是 $('html, body'))... 但它在这里工作:jsfiddle.net/s7f87a2n
  • @mark.hch 感谢您的意见。将尝试更正。当我尝试通过单击重新运行该功能时,动画开始工作,然后重新加载页面。

标签: jquery jquery-mobile


【解决方案1】:

$(this).unbind("click.myEvent"); 在这里你解除了事件监听器的绑定。这样做的结果是您的事件只触发一次(因为它会在第一次触发后停止侦听。)

在 jQuery 中实现该功能的更简洁的方法是使用 jQuery one method 附加事件处理程序。

另一方面,如果您试图只在动画未运行时侦听元素,您可以附加事件侦听器,并在动画开始时将其移除。动画后重新附加事件。您提供的示例如下所示:

$('.viewAll').on('click', viewAllClick);
function viewAllClick(evt) {
    $('.mobileNavBtn, #shopNavTabBtn, #sec0').click();
    //detach this event
    $('.viewAll').off('click', viewAllClick);

    $('body').animate({
        scrollTop: $("#sec0").offset().top,
    }, {
        done: function () {
            //reattach the event
            $('.viewAll').on('click', viewAllClick);
        },
        duration: 2000
    });
}

我会仔细检查您的 animate 调用,以确保它按照您的实际意图进行。

看到这个plunker for a similar example。单击文本并观察到仅在动画重新附加事件后才记录动画,而每次单击文本时都会触发 clicked。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2015-11-04
    • 1970-01-01
    相关资源
    最近更新 更多