2011-08-17 7 views
1

JQueryUIとJavascriptが初めてで、JQueryUI ProgressBarを使用しています。誰かがボタンをクリックするたびに、プログレスバーがアニメーション化されていっぱいになります。どのボタンが既に押されているかを追跡して、ボタンがイベントを再度トリガーするのを防ぐ方法はありますか?Javascript/JQueryでボタンイベントが1回だけトリガーされるようにするにはどうすればいいですか?

現在の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'); }  
    }); 

答えて

4

私はJavaScriptでクリックイベントをバインドとjQuery .one()メソッドを使用します。

documentation

基本的にひとつの方法は、あなたは、このようなクリックイベントとして、一度だけトリガーされるイベントをバインドすることができます。

Live Demo

​​
+0

シンプルでポイントに、魅力のように働きました。もう少しJQueryのドキュメントを掘り下げなければならないでしょう。どうもありがとう! :D – lislis

+0

ページがリフレッシュまたはリロードされた後、ユーザーは再び関数を呼び出すことができます。これを制限する方法はありますか?この関数はiframeページで呼び出され、ユーザーがリンクをクリックするとそのページが更新され、一度の呼び出しが無効になるため、私は尋ねています。何か案は? – lislis

+0

ページがリロードされると、JSがリロードされます。 page.html?perc = 25のようなパラメータを使用してページをリロードすると、リロード時にパーセンテージがすでに25%になっていることがわかります。または、ページパラメータを介してクリックされた要素を渡します。次に、ページの読み込み時にURLパラメータを解析し、リンクを無効にする必要があります。それはまったく別の問題だ。 – Loktar

0

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

これは、私が実際にやらなければならなかったボタンを実際に再クリックしないようにすることを除いて、うまくいきました。しかし、私は、それがどの要素にも適用できる一般化を愛していました。 – lislis

関連する問題