【问题标题】:How to make sure buttons events are only triggered once in Javascript/JQuery?如何确保按钮事件仅在 Javascript/JQuery 中触发一次?
【发布时间】:2011-10-29 07:11:26
【问题描述】:

我是 JQuery 和 Javascript 的新手,我正在使用 JQueryUI ProgressBar,每次有人点击一个按钮时,进度条就会动画并填满。有没有办法跟踪哪些按钮已经被按下以防止按钮再次触发事件?

当前 HTML:

   <ul>
     <li><a href="left/section1.html" target="leftcontainer" onClick="updateBar();window.presentation.location.href='right/section1/page1.html';;return true;">overview</a></li> 
     <li><a href="left/section2.html" target="leftcontainer" onClick="updateBar();window.presentation.location.href='right/section1/page1.html';;return true;">key features</a></li>
     <li><a href="#" onClick="updateBar()">customers</a></li>
     <li><a href="#" onClick="updateBar()">accessories</a></li>
     <!--<li><a href="#">nav5</a></li>
     <li><a href="#">nav6</a></li> -->
    </ul>

当前的 JQuery/JavaScript:

var percentage = 0;                                                     

function updateBar() 
{
    percentage += 25;                                                               
    $('.ui-progressbar-value').stop().animate({ width: percentage+"%" }, 500)       
    $('.middle').progressbar('option','value', percentage);                         

    if(percentage > 100)                                                            
    {
        $('ui-progressbar-value').stop().animate({ width: "100%"}, 500);            
    }
}

$(function() {
    $('.middle').progressbar({                                          
        value: percentage,                                              
        complete: function() { alert('The progress bar is full'); }     
    });

【问题讨论】:

    标签: javascript jquery progress-bar jquery-events


    【解决方案1】:

    我会在 JavaScript 中绑定 click 事件并使用 jQuery .one() 方法。

    documentation

    基本上 one 方法允许您绑定只能触发一次的事件,例如点击事件。

    Live Demo

    var percentage = 0;                                                     
    
    $('ul li a').one('click', updateBar);
    
    function updateBar() 
    {
        percentage += 25;                                                               
        $('#test').text(percentage);
    }
    

    【讨论】:

    • 这就像一个魅力,简单明了。我将不得不在 JQuery 文档中进行更多研究。非常感谢! :D
    • 页面刷新/重新加载后,用户可以再次调用该函数。有什么办法可以限制这一点。我之所以问,是因为在 iframe 页面中调用了此函数,并且当用户单击链接时会刷新该页面,从而否定了一次性调用。有什么想法吗?
    • 如果页面被重新加载,JS将被重新加载:?您可以尝试使用 page.html?perc=25 之类的参数重新加载页面,因此在重新加载时它知道百分比已经是 25%。或者通过页面参数传递被点击的元素。然后,您必须在页面加载时解析 url 参数并禁用链接。不过,这完全是另一个问题。
    【解决方案2】:

    HTML(添加类):

     <li><a href="#" class='clickable'>customers</a></li>
     <li><a href="#" class='clickable'>accessories</a></li>
    

    JS

    var percentage = 0;                                                     
    
    $(function() {
        $('.clickable').click(function updateBar(){
            $(this).unbind('click'); //dont allow click again
            percentage += 25;                                                               
            $('.ui-progressbar-value').stop().animate({ width: percentage+"%" }, 500);       
            $('.middle').progressbar('option','value', percentage);                         
    
           if(percentage > 100)                                                            
           {
               $('ui-progressbar-value').stop().animate({ width: "100%"}, 500);            
           }
        });
    
        $('.middle').progressbar({                                          
            value: percentage,                                              
            complete: function() { alert('The progress bar is full'); }     
        });
     });
    

    【讨论】:

    • 这很好用,只是它限制了我实际上需要重新单击按钮。但是,我喜欢它的概括性,因此它可以应用于任何元素。
    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多