防止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。
答
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); });
}
});});
它嵌套在一堆divs中吗?你有没有试过[this](http://api.jquery.com/event.stopPropagation/) – tjameson 2011-04-05 17:40:40
“rating”方法来自哪里?这可能是问题所在。 – 2011-04-05 17:50:10
@Mike来自插件。 – eagerMoose 2011-04-05 17:50:51