2011-04-05 114 views
1

我使用的是一個來自here的jQuery星級插件,效果很好,但是在頁面加載時有一個被調用11次的函數!該功能只應在評級被提交時被調用,即點擊一個星號。 有什麼我可以做的,以阻止它在頁面加載被調用?防止jQuery函數在頁面加載時被多次調用

這是功能,這是在$(文件)。就緒在我的js文件:

$(".auto-submit-star").rating({ 
     callback: function (value, link) { 
      $.getJSON('/Handlers/RatingHandler.ashx?productId=' + pid + '&productScore=' + value, function (data) { postRatingUpdate(data); }); 
     } 
    }); 

我不知道足夠的javascript走在了插件的js文件戳輪有任何信心,所以我不確定幕後發生了什麼。

這是使評級明星的HTML:

<input class="auto-submit-star" type="radio" name="product-rating" value="1" /> 
<input class="auto-submit-star" type="radio" name="product-rating" value="2"/> 
<input class="auto-submit-star" type="radio" name="product-rating" value="3"/> 
<input class="auto-submit-star" type="radio" name="product-rating" value="4"/> 
<input class="auto-submit-star" type="radio" name="product-rating" value="5"/> 

UPDATE: 嘗試一些提到的修復後,我意識到,計費方法沒有得到多次調用,但它內部的回調是,並且因爲這包含了我的getJSON調用,所以多次調用它。我認爲需要多次回調才能將單選按鈕轉換爲星星。

解決的辦法是將getJSON調用移入一個單獨的函數中,並在插件的js文件中爲OnClick後面的html添加一個OnClick。

+0

它嵌套在一堆divs中嗎?你有沒有試過[this](http://api.jquery.com/event.stopPropagation/) – tjameson 2011-04-05 17:40:40

+0

「rating」方法來自哪裏?這可能是問題所在。 – 2011-04-05 17:50:10

+0

@Mike來自插件。 – eagerMoose 2011-04-05 17:50:51

回答

0
var stopMe = false; 
if(!stopMe) { 
stopMe = true 
$(".auto-submit-star").rating({ 
     callback: function (value, link) { 
      $.getJSON('/Handlers/RatingHandler.ashx?productId=' + pid + '&productScore=' + value, function (data) { postRatingUpdate(data);}); 
     } 
    }); 
} 
1

如果評級被調用onload。那麼看起來評級是一種只有在點擊廣播時才被調用的方法。

$(".auto-submit-star").change(function(){ 
$(this).rating({ 
    callback: function (value, link) { 
     $.getJSON('/Handlers/RatingHandler.ashx?productId=' + pid + '&productScore=' + value, function (data) { postRatingUpdate(data); }); 
    } 
});});