防止jQuery函数在页面加载时被多次调用

问题描述:

我使用的是一个来自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

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);}); 
     } 
    }); 
} 

如果评级被调用onload。那么看起来评级是一种只有在点击广播时才被调用的方法。

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