2010-04-26 88 views
1

基本上,我創建了一個五星評級系統。很典型。它顯示了其他人給出該項目的星星數量,然後當用戶懸停在星星上時,它會根據星星的數量結束點亮x個星星。javascript禁用div或鏈接? (對於五星評級系統)

這一切都由AJAX運行。他們點擊5星會自動爲團隊添加5星評級。問題是,他們評價後,我想關閉系統,但我似乎無法做到這一點。

我試過了我能想到的一切。我已經嘗試使用element.disable作爲hrefs和div,但它仍然讓它們一遍又一遍地投票,至少在firefox中....任何人都可以用一種方法來幫助我簡單地「凍結「用戶投票的星星是什麼?如果我需要添加代碼,那很酷!我想這可能不是必要的!

我可能應該添加。出於複雜的原因,這是直接的js,而不是jquery或其他任何東西。

回答

1

這真的取決於你如何實現你的代碼,而是說你有一些鏈接:

<div id="star-1" class="rate-it"><!-- HTML markup for your 5 stars --></div> 
<div id="star-2" class="rate-it"><!-- HTML markup for your 5 stars --></div> 

,並動態地添加的onclick到基礎格,然後在被調用的函數,你會做什麼像這樣:

function rateStars() { 
    if(!this.rated) { 
     this.rated = true; 
     ...other code... 
    } 
} 

它有點取決於範圍內的東西,但如果HTML元素是範圍,這將工作。

+0

這就是我最終做的。還要感謝BradBrening。我吃了事件處理程序,這兩種方法結合得很好。 – Cyprus106 2010-04-29 04:36:59

1

如果你已經創建了這段代碼,你應該創建一些事件處理程序來實現鼠標懸停和點擊。如果您檢測到用戶以前執行過此操作,那麼只需簡單地使用這些事件。

0

的jQuery(我推薦它),這將是很容易

說你有一些HTML這樣

<div id="star-1" class="rate-it">...</div> 
<div id="star-2" class="rate-it">...</div> 

那麼你的JS與jQuery

$(document).ready(function() { 
    $(".rate-it").click(function() { 
     // do your ajax calls, this.id => star-1, star-2, etc... depending on the clicked item 
     $(".rate-it").unbind("click"); // remove the handlers 
    }); 
}); 
1

以下定義了兩個元素,它們都具有點擊處理程序。但是,您可以繼續點擊第一個以獲取警示框,而第二個則可以在第一次點擊時禁用其處理程序,因此在進一步點擊時它會「靜音」。

<span onclick='alert("Element 1")'>Button1</span><br/> 
<span onclick='alert("Element 2");this.onclick=""'>Button2</span> 

你不想在生產代碼中使用它,但它是一個簡短的例子,說明你應該做的事情。

0

這是我想出了一個解決辦法,希望它可以幫助你:

<html> 
<head> 
<body> 
<a href="#" onclick="mumboJumbo(this); return false;">Rate me!</a> 
<script> 
    function mumboJumbo(me){ 
     var myDad = me.parentNode; 
     var mySis = document.createElement('span'); 
     mySis.setAttribute('style', 'color: grey;'); 
     mySis.innerHTML = me.innerHTML; 
     myDad.removeChild(me); 
     myDad.appendChild(mySis); 
    }; 
</script> 
</body> 
</html> 

它所做的就是更換aspan(如你所說你在哪裏使用a's)。